asp.net - 嵌套中继器错误: Object reference not set to an instance of an object

标签 asp.net vb.net repeater nested-repeater

我正在使用一些之前用于嵌套 ListView 的代码,并尝试使其与嵌套中继器一起使用,但出现错误。

System.NullReferenceException:未将对象引用设置为对象的实例。

.aspx

    <asp:Repeater ID="reMainNav" runat="server">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate><li><%# DataBinder.Eval(Container.DataItem, "name")%>

        <asp:Repeater ID="reSubNav" runat="server">
            <HeaderTemplate>
                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <%# DataBinder.Eval(Container.DataItem, "name")%>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

    </li></ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>

.vb

    Protected Sub reMainNav_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles reMainNav.ItemDataBound

    Dim rowView As System.Data.DataRowView
    rowView = CType(e.Item.DataItem, System.Data.DataRowView)

    'database connection from web.config file
    Dim synergySQL As SqlConnection = New SqlConnection()
    synergySQL.ConnectionString = ConfigurationManager.ConnectionStrings("connSynergy").ConnectionString()

    'check if personal section complete
    Dim cmdSubNav As SqlCommand = New SqlCommand()
    cmdSubNav.Connection = synergySQL
    cmdSubNav.CommandText = "SELECT * FROM [subNavigation] WHERE [parentId] = " & rowView("id") & " ORDER BY [orderNo]"
    cmdSubNav.CommandType = CommandType.Text
    'data adapter
    Dim daSubNav As SqlDataAdapter = New SqlDataAdapter
    daSubNav.SelectCommand = cmdSubNav
    'data set
    Dim dsSubNav As DataSet = New DataSet()
    daSubNav.Fill(dsSubNav, "SubNav")

    Dim iSchedule As Integer
    iSchedule = dsSubNav.Tables(0).Rows.Count

    Dim reSubNav As Repeater = CType(e.Item.FindControl("reSubNav"), Repeater)
    reSubNav.DataSource = dsSubNav
    reSubNav.DataBind()

    synergySQL.Close()

End Sub

我需要对中继器做一些不同的事情吗?

感谢您的帮助。

J.

最佳答案

它的标题行是第一次,因此您无法获得内部转发器控件。对项目类型进行检查,如下所示。

Protected Sub reMainNav_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles reMainNav.ItemDataBound

 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)

    'database connection from web.config file
    Dim synergySQL As SqlConnection = New SqlConnection()
    synergySQL.ConnectionString = ConfigurationManager.ConnectionStrings("connSynergy").ConnectionString()

    'check if personal section complete
    Dim cmdSubNav As SqlCommand = New SqlCommand()
    cmdSubNav.Connection = synergySQL
    cmdSubNav.CommandText = "SELECT * FROM [subNavigation] WHERE [parentId] = " & rowView("id") & " ORDER BY [orderNo]"
    cmdSubNav.CommandType = CommandType.Text
    'data adapter
    Dim daSubNav As SqlDataAdapter = New SqlDataAdapter
    daSubNav.SelectCommand = cmdSubNav
    'data set
    Dim dsSubNav As DataSet = New DataSet()
    daSubNav.Fill(dsSubNav, "SubNav")

    Dim iSchedule As Integer
    iSchedule = dsSubNav.Tables(0).Rows.Count

    Dim reSubNav As Repeater = CType(e.Item.FindControl("reSubNav"), Repeater)
    reSubNav.DataSource = dsSubNav
    reSubNav.DataBind()

    synergySQL.Close()

End If

End Sub

关于asp.net - 嵌套中继器错误: Object reference not set to an instance of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6857761/

相关文章:

asp.net - 301 重定向的正确 Controller 代码

javascript - 直接下载文件,而不是从 window.open(url)

.net - 为什么使用 DirectoryEntry 对 LDAP 进行身份验证会间歇性地抛出 COMException (0x8007203A) : "The server is not operational"?

vb.net - 我可以将后台智能传输服务与 FTP 一起使用吗?

c# - ASP.NET Identity 使用 ConfigureAwait(false),为什么安全?

vb.net - 存储值的最佳方法

vb.net - 跨多个文件扩展 VB.NET 类定义

c# - Webforms Repeater 链接问题

c# - 如何将参数传递给 SP 并检索选择字段给中继器

c# - 在中继器中搜索 ImageButton