我正在使用asp.net转发器来创建一堆图像。图像标记完全相同,因此标准<ItemTemplate>
很好。
但是,我想将K图像包装在div中。让我说我将25个以上的图像绑定到转发器,我希望每个div有5个图像。如何有条件地创建div的开始和关闭标签?
这是一个更适合for循环的案例。
答案 0 :(得分:23)
这应该对你有用,后面的代码中不需要任何东西(除了绑定转发器......):
<asp:Repeater ID="repImages" runat="server">
<HeaderTemplate><div></HeaderTemplate>
<ItemTemplate>
<%# (Container.ItemIndex != 0 && Container.ItemIndex % 5 == 0) ? @"</div><div>" : string.Empty %>
<asp:Image ID="imgGallery" runat="server" ImageUrl='<%# /* your code here */ %>' />
</ItemTemplate>
<FooterTemplate></div></FooterTemplate>
</asp:Repeater>
答案 1 :(得分:10)
这里是Asp.Net WebForms可以为您提供令人难以置信的RAD效率的地方。 您可以使用新的ListView控件,并设置每个“组”的项目数,这将允许您设置围绕组的HTML以及每个单独的项目。这样,您可以使用条件标记围绕组。
<asp:ListView ID="ListView1" runat="server" DataKeyNames="id" DataSourceID="LinqDataSource1" GroupItemCount="3">
<LayoutTemplate>
<div id="layout">
<asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder>
</div>
</LayoutTemplate>
<GroupTemplate>
<div class="group">
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</div>
</GroupTemplate>
<EmptyDataTemplate>
<span>No data was returned.</span>
</EmptyDataTemplate>
<ItemTemplate>
<div class="item">
<img alt='<%# Eval("title") %>' title='<%# Eval("title") %>'
src='<%# Eval("filename","photos/{0}") %>' />
</div>
</ItemTemplate>
</asp:ListView>
答案 2 :(得分:3)
如果你想在ASPX页面上保留你的标记,你也可以在David的方法上尝试这种变化:
在aspx页面上:
<ItemTemplate>
<asp:Literal runat="server" ID="divStart" Text="<div>" />
<asp:Image ....>
<asp:Literal runat="server" ID="divEnd" Text="</div>" />
</ItemTemplate>
在代码隐藏中的ItemDataBound事件中:
e.Item.FindControl("divStart").Visible
= e.Item.FindControl("divEnd").Visible
= e.Item.ItemIndex % 5 == 0;
答案 3 :(得分:2)
将两个空标签控件添加到您想要div标签的Repeater ItemTemplate中。
然后将ItemDataBound事件添加到Repeater。
然后将此代码添加到ItemDataBound事件中:
Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
If e.Item.ItemIndex Mod 5 = 0 Then
Dim lblDivStart As Label = CType(e.Item.FindControl("lblDivStart"), Label)
Dim lblDivEnd As Label = CType(e.Item.FindControl("lblDivEnd"), Label)
lblDivStart.text = "<div>"
lblDivEnd.text = "</div>"
End If
End If
End Sub
注意 - 这需要一些调整来处理第一个div,你可能需要做一些像 If(e.Item.ItemIndex + 1)Mod 5 = 0 这样的东西来显示div准确到达你想要的地方。
了解更多信息:
DataListItem.ItemIndex Property
DataList.ItemDataBound Event