后台代码用随机数加载图片失效,需移至PreRender而非Page_Load?
问题解答
首先,把随机数生成URL的逻辑放在Page_Load里本身是可行的,不一定非要移到PreRender子过程,先排查几个可能导致图片不显示的关键点:
相对路径的正确性:你看到断点里的路径字符串是对的,但要注意ASP.NET中控件的
ImageUrl是相对于当前请求的.aspx页面的,而非.master文件所在的位置。如果你的.aspx页面不在根目录,直接写"templates/images/..."会导致路径错误。解决方法是用ResolveUrl方法生成根相对路径,确保无论页面在哪都能正确定位图片:acctimage.ImageUrl = ResolveUrl("~/templates/images/acctimg" & a.ToString() & ".jpeg") taximage.ImageUrl = ResolveUrl("~/templates/images/tax" & b.ToString() & ".jpeg")随机数初始化问题:VB的
Rnd()函数如果没有先调用Randomize(),每次页面加载会生成重复的随机序列(看起来像是同一个图片反复出现)。可以在生成随机数前加上Randomize(),确保每次刷新都能得到不同的随机数:Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Randomize() Dim a As Int16 = Int((7 * Rnd()) + 1) acctimage.ImageUrl = ResolveUrl("~/templates/images/acctimg" & a.ToString() & ".jpeg") Dim b As Int16 = Int((7 * Rnd()) + 1) taximage.ImageUrl = ResolveUrl("~/templates/images/tax" & b.ToString() & ".jpeg") End Sub是否有后续逻辑覆盖属性:检查你的master页面或引用它的aspx页面,有没有在
Page_Load之后的生命周期阶段(比如PreRender)修改了ImageUrl,如果有会覆盖你在Page_Load里设置的值。
如果上述都排查过,路径确实正确,那移到PreRender也可以试试,但本质上不是必须的,核心还是路径和随机数初始化的问题。
内容的提问来源于stack exchange,提问作者Scot
相关产品推荐
相关产品推荐

