以下代码:
<% foreach (Entities.Core.Location loc in locations){ %>
<div class="place_meta">
<img src="~/static/images/stars/star_25_sml.gif" runat="server" class="star_rating"/>
</div>
<% }; %>
我想显示所显示的每个位置对象的星级评分图像。但是,仅显示第一个位置对象的星级。对于其余部分,图片代码变为<img class="star_rating" />
我是否遗漏了语法中的任何内容,以便能够在aspx页面上的foreach中使用runat = server进行控制?这是ASP.net 2.0。
我可以在codebehind或display类中调用一个函数来绝对映射URL,但如果有解决这个问题的话,我很好奇。
仅为了澄清,每个位置对象的图像路径可能不同。
答案 0 :(得分:3)
您不能在内联循环中使用服务器控件,因为ASP.NET需要能够唯一地标识每个控件来处理它。 for ...循环阻止了这一点。最简单,最干净的方法是使用Repeater控件并将您的集合绑定到它(在代码隐藏中)。在绑定事件处理程序中设置URL属性,并在绑定时维护计数器变量,以检查您是否在第一个项目。
编辑:我已经玩了更多,并发现如果你分配一个ID属性,所有循环实例都会获得相同的ID,但ASP.NET只识别找到的第一个控件。这将是一种非常脏的方法,仅在第一个实例上设置属性。请不要写这样的代码。
答案 1 :(得分:1)
除非您使用MVC,否则在这种情况下您可能会发现Repeater Control更有用。
如果我没记错的话,您可以使用数据源(此实例中的位置),然后循环并设置每个图像。
答案 2 :(得分:1)
我不知道你的代码是否应该有效,但这个代码是; - )
<asp:Image ImageUrl="~/static/images/stars/star_25_sml.gif" runat="server" class="star_rating" />
也许这就是你要找的东西。
编辑:查看System.Web.UI.HtmlControls.HtmlImage
的代码,您可以看到src
属性在(第一次)处理后被删除。这可能是您可以使用代码获得第一个URI的原因。
答案 3 :(得分:0)
我会删除runat="server"
属性并使用相对路径(或完整路径)引用图像,而不是使用代字号。
编辑: FWIW,@ miies的想法符合ASP.NET范例,并且是我转换到ASP.NET MVC的一个例子。