如何在代码后置及内嵌渲染块中获取Repeater的当前ItemIndex值
解决方案
原理说明
Container 仅在数据绑定表达式(<%# %> 块)的上下文中可用,你使用的 <% %> 属于普通代码渲染块,默认没有绑定上下文,因此直接访问会提示未声明。
方案1:Code Render Block 写法(完全符合你的需求)
你可以先通过数据绑定表达式把当前项索引存入页面局部变量,后续的代码渲染块即可直接调用:
<ItemTemplate> <%# Dim currentIndex As Integer = Container.ItemIndex %> <% If currentIndex = 2 Then %> TRUE/此处放置较长的HTML内容/ <% Else %> false/此处放置较长的HTML内容/ <% End If %> </ItemTemplate>
如果是C#语法的项目,对应写法如下:
<ItemTemplate> <%# int currentIndex = Container.ItemIndex; %> <% if (currentIndex == 2) { %> TRUE/此处放置较长的HTML内容/ <% } else { %> false/此处放置较长的HTML内容/ <% } %> </ItemTemplate>
方案2:后台事件处理(可选,适合逻辑更复杂的场景)
你也可以在Repeater的ItemDataBound事件中处理不同内容的显隐:
前台模板代码
<ItemTemplate> <asp:PlaceHolder ID="TrueContent" runat="server"> TRUE/此处放置较长的HTML内容/ </asp:PlaceHolder> <asp:PlaceHolder ID="FalseContent" runat="server"> false/此处放置较长的HTML内容/ </asp:PlaceHolder> </ItemTemplate>
后台绑定逻辑(VB示例)
Protected Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound ' 仅处理数据行,跳过页眉页脚等类型 If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim index As Integer = e.Item.ItemIndex Dim trueContent = CType(e.Item.FindControl("TrueContent"), PlaceHolder) Dim falseContent = CType(e.Item.FindControl("FalseContent"), PlaceHolder) trueContent.Visible = (index = 2) falseContent.Visible = Not trueContent.Visible End If End Sub
内容的提问来源于stack exchange,提问作者Megrez7
相关产品推荐
相关产品推荐

