首页 > 解决方案 > 由于中继器内背景图像的内联设置,ASP.NET 页面加载触发两次

问题描述

一切都在运行两次。我有一个中继器,我尝试在它的 ItemTemplate 中设置一个背景图像。我将其缩小到以下行。一旦我拉出 style 属性中的 background-image... 部分,它就只运行一次。照片是一个数据uri。如果我将代码留在其中,它实际上会显示背景图像,但会导致所有内容运行两次。奇怪的是,如果我在“url”和“(”之间放置一个空格,它也会停止触发两次,但是背景图像不会显示,因为它破坏了背景图像所需的语法。我不知道为什么它导致它触发两次。我也尝试了变化,但同样的问题。似乎与我使用数据 uri 的事实无关,因为我只尝试了一个典型的 file.jpg,但它仍然触发了两次。 .. 我还把它从 style 属性中拉出来,把它放在一个像 test="" 这样的可信属性中,它就起作用了。因此,绑定到 css 属性“background-image: url(...)”似乎是一个直接问题

我什至尝试将代码移动到 ItemDataBound 事件,它仍然导致页面运行两次。我就是想不通。

<span style='<%# "background-image:url("+DataBinder.Eval(Container.DataItem, "Photo")+");height: 32px; width: 32px;background-size: 100%;background-position:0% 25%;background-repeat:no-repeat;"%>'></span>


<span style='background-image:url(<%#DataBinder.Eval(Container.DataItem, "Photo")%>);height: 32px; width: 32px;background-size: 100%;background-position:0% 25%;background-repeat:no-repeat;'></span>

标签: asp.neturirepeater

解决方案


所以这个问题与我试图显示图像的任何一种方式都没有关系,这是由于转发器中的一些其他项目没有 Photo 的值,所以它最终产生了:

<span style='background-image:url("");height: 32px; width: 32px;background-size: 100%;background-position:0% 25%;background-repeat:no-repeat;'></span>

这使背景图像的 URL 为空。显然这会导致浏览器重新加载页面两次......从 2011 年的文章:https ://www.bennadel.com/blog/2236-empty-src-and-url-values-can-cause-duplicate-page-requests .htm,听起来空的 url() 被解释为页面本身,从而导致浏览器加载页面两次。有道理,但不确定为什么浏览器不会以不同的方式解释它以避免这个问题,即无法解释为什么需要或想要将页面本身加载为背景图像。


推荐阅读