Шаблон заголовка повторителя находит <ul>на ItemDataBound - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь добавить атрибут к тегу с идентификатором 'SubNav2' на ItemDataBound, который находится в шаблоне HeaderTetlate ретранслятора.

Но я продолжаю получать сообщение об ошибке: ссылка на объект не установлена ​​на экземпляробъект.

Что я думаю, потому что он не находит объект с идентификатором 'SubNav2', правильно ли я это делаю?

CODE BEHIND

If e.Item.ItemType = ListItemType.Header Then

        Dim ulSubNav2 As HtmlGenericControl = CType(e.Item.FindControl("SubNav2"), HtmlGenericControl)
        ulSubNav2.Style.Add("display", "block")

    End If

Дополнительный код Итак, я пытаюсь найти это во втором идентификаторе ретранслятора = 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>

CODE BEHIND

    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

1 Ответ

1 голос
/ 24 августа 2011

Убедитесь, что в UL есть тег runat = "server", и вы сможете найти его.

EDIT

Вместо запуска всегоlist на сервере, попробуйте просто запустить элемент списка на сервере, например так:

<ul>
   <li id="listItem" runat="server">Hello!</li>
</ul>

Если это не приводит к ошибкам, вы сможете получить к нему доступ в коде, подобном следующему:

HtmlGenericControl ctrl = e.Item.FindControl("listItem");
...