如何在ASP.NET WebPAge中使用Eval作为数组?
我想写一些像<%# Eval(Images.First().SmallImageUrl) %>
或
<%# Eval(Images.SingleOrDefault(x => x.IsMainIMage).SmallImageUrl) %>
以下是代码示例:
<asp:Repeater ID="GoodsRepeater" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div class="<%# (Container.ItemIndex % 2)!=0 ? "GoodItemTdEven" : "GoodItemTdOdd" %>">
<asp:Image ID="Image1" ImageUrl='<%# "/" + Eval("GoodsImages.First().SmallImageUrl") %>' AlternateText='<%# Eval("Name") %>' runat="server" />
<div class="GoodItemDescriptionDiv" >
<asp:HyperLink CssClass="GoodItemNameText" NavigateUrl='<%# "~/Pages/Main/Catalog.aspx?productId=" + Eval("Id") %>' Text='<%# Eval("Name") %>' runat="server" />
<%--<span class="GoodItemNameText"> <%# Eval("Name") %> </span> <br /> <br />--%>
<span class="GoodItemDescriptionText" > <%# Eval("Description") %> </span>
<br />
</div>
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
我有一个例外'DataBinding:'First()'不是有效的索引表达式。'
答案 0 :(得分:5)
为什么不在代码隐藏中创建一个帮助方法来获取此值?它可以使你的标记更清晰:
<%# GetImageUrl((YourImagesType)Eval("Images")) %>
然后在代码隐藏中:
protected static string GetImageUrl(YourImagesType images)
{
return images
.Where(x => x.IsMainIMage)
.Select(x => x.SmallImageUrl)
.FirstOrDefault();
}
答案 1 :(得分:3)
Container.DataItem
上的实际表达式 - 例如
<asp:Image ID="Image1" ImageUrl='<%# "/" + (([your object type])Container.DataItem).GoodsImages[0].SmallImageUrl %>' AlternateText=...
这假设您将转发器绑定到[your object type]
的集合,并且该类型的方法名为GoodsImages
,返回一个数组。
请注意,如果您希望使用First
等扩展方法,则编译器仅在您要导入的名称空间中查找它们。因此,您需要再次使用@Import指令或Extension类,即Enumerable.First(...
)