Asp.net 中继器头模板查找<;ul>;关于ItemDataBound
我正在尝试向位于中继器HeaderTemplate中的ItemDataBound上ID为“SubNav2”的标记添加属性 但我一直得到一个错误:对象引用未设置为对象的实例 我想这是因为它找不到ID为'SubNav2'的对象,我的方法正确吗 代码隐藏Asp.net 中继器头模板查找<;ul>;关于ItemDataBound,asp.net,vb.net,repeater,findcontrol,Asp.net,Vb.net,Repeater,Findcontrol,我正在尝试向位于中继器HeaderTemplate中的ItemDataBound上ID为“SubNav2”的标记添加属性 但我一直得到一个错误:对象引用未设置为对象的实例 我想这是因为它找不到ID为'SubNav2'的对象,我的方法正确吗 代码隐藏 If e.Item.ItemType = ListItemType.Header Then Dim ulSubNav2 As HtmlGenericControl = CType(e.Item.FindControl("SubNav
If e.Item.ItemType = ListItemType.Header Then
Dim ulSubNav2 As HtmlGenericControl = CType(e.Item.FindControl("SubNav2"), HtmlGenericControl)
ulSubNav2.Style.Add("display", "block")
End If
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
附加码
所以我想找到的是第二个中继器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>
确保UL具有runat=“server”标记,并且您应该能够找到它 编辑 不要在服务器上运行整个列表,而是尝试在服务器上运行列表项,如下所示:
<ul>
<li id="listItem" runat="server">Hello!</li>
</ul>
HtmlGenericControl ctrl = e.Item.FindControl("listItem");
确保UL具有runat=“server”标记,并且您应该能够找到它 编辑 不要在服务器上运行整个列表,而是尝试在服务器上运行列表项,如下所示:
<ul>
<li id="listItem" runat="server">Hello!</li>
</ul>
HtmlGenericControl ctrl = e.Item.FindControl("listItem");
代码看起来不错。不确定为什么找不到子AV2。你可以发布更多的代码吗?嗯…奇怪,上面发布了更多代码,谢谢你的帮助。是的,你只是看了看,因为你不能把runat=“server”放在ul标签上,它永远不会出现在服务器端,所以你只能使用javascript来完成这项工作。代码看起来不错。不确定为什么找不到子AV2。你能再发一些代码吗?嗯…奇怪,上面发了更多代码,谢谢你的帮助。是的,你只是看着它,因为你不能把runat=“server”在ul标记上,它永远不会出现在服务器端,因此您只能使用javascript来完成这项工作。我尝试过这样做,但我遇到了一个错误:创建控件时出错-reSubNav意外结束文件以查找标记(标签位于页脚模板中)。我在上面添加了更多的代码。哦!我知道你在做什么。有没有一个原因让你不能只用JavaScript来做这件事?是的,但我想做的是改变显示:
- 标记上没有显示,所以需要找到它。大约有10个分区,每个分区都有一个隐藏的子AV,我想显示正确的子AV,具体取决于他们选择的分区。例如Item.FindControl(“listItem”)。Parent执行此操作???@JBoom:您可以设置它,使所有项都嵌套在列表项中吗?您正在尝试创建手风琴菜单吗?我已经尝试过了,但出现了一个错误:创建控件时出错-reSubNav意外的文件结尾,正在查找标记(
- 标记上没有显示,所以需要找到它。大约有10个分区,每个分区都有一个隐藏的子AV,我想显示正确的子AV,具体取决于他们选择的分区。例如Item.FindControl(“listItem”)。Parent执行此操作???@JBoom:您可以设置它,使所有项都嵌套在列表项中吗?您正在尝试创建手风琴菜单吗?