我正在尝试在ItemDataBound上的ID为“SubNav2”的标记中添加一个属性,该数据位于转发器的HeaderTemplate中。
但我一直收到错误:对象引用未设置为对象的实例。
我认为是因为它没有找到ID为'SubNav2'的对象,我是否正确地使用它?
代码背后
If e.Item.ItemType = ListItemType.Header Then
Dim ulSubNav2 As HtmlGenericControl = CType(e.Item.FindControl("SubNav2"), HtmlGenericControl)
ulSubNav2.Style.Add("display", "block")
End If
添加个人密码 所以我试图找到的是第二个转发器ID = reSubNav2。是否必须有runat = server?
<asp:Repeater ID="reSubNav" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink ID="SubNavLink" runat="server"></asp:HyperLink>
<asp:Repeater ID="reSubNav2" runat="server" OnItemDataBound="reSubNav2_ItemDataBound">
<HeaderTemplate>
<ul id="SubNav2" style="display:none;">
</HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink ID="SubNavLink2" runat="server"></asp:HyperLink></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<ul>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
代码背后
Protected Sub reSubNav2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim rowView As System.Data.DataRowView
rowView = CType(e.Item.DataItem, System.Data.DataRowView)
ElseIf e.Item.ItemType = ListItemType.Header Then
Dim ulSubNav2 As HtmlGenericControl = CType(e.Item.FindControl("SubNav2"), HtmlGenericControl)
ulSubNav2.Style.Add("display", "block")
End If
End Sub
答案 0 :(得分:1)
确保UL具有runat =“server”标记,您应该能够找到它。
修改强>
不要在服务器上运行整个列表,而是尝试在服务器上运行列表项,如下所示:
<ul>
<li id="listItem" runat="server">Hello!</li>
</ul>
如果没有出现任何错误,您应该可以在后面的代码中访问它:
HtmlGenericControl ctrl = e.Item.FindControl("listItem");