Пользовательский / серверный элемент управления .NET с пользовательскими элементами списка - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь создать простой пользовательский элемент управления меню, как указано ниже здесь .

Прикрепленный код приводит к ошибке «Ссылка на объект не установлена ​​на экземпляр объекта», но я не могу понять, почему.Есть мысли?

<%@ Master Language="VB" CodeFile="MySite.master.vb" Inherits="MySite" %>
<%@ Register src="Controls/Menu.ascx" tagname="Menu" tagprefix="my"  %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>MySite</title>
    <link href="Styles/MySite.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder id="headContent" runat="server">
    </asp:ContentPlaceHolder>    
</head>
<body id="masterBody" runat="server">
    <form id="form1" runat="server">
        <my:Menu ID="Menu1" runat="server">
            <MenuItems>
                <my:MenuItem Text="Test" NavigateUrl="~/Default.aspx" />
            </MenuItems>
         </my:Menu>
    </form>
</body>
</html>

Partial Class Controls_Menu
        Inherits System.Web.UI.UserControl

    Private m_Items As List(Of MenuItem) = Nothing
        <PersistenceMode(PersistenceMode.InnerProperty)> _
        Public Property MenuItems() As List(Of MenuItem)
            Get
                Return m_Items
            End Get
            Set(ByVal value As List(Of MenuItem))
                m_Items = value
            End Set
        End Property

    End Class

    Public Class MenuItem
        Private m_Text As String
        Public Property Text() As String
            Get
                Return m_Text
            End Get
            Set(ByVal value As String)

            End Set
        End Property
        Private m_NavigateUrl As String
        Public Property NavigateUrl() As String
            Get
                Return m_NavigateUrl
            End Get
            Set(ByVal value As String)
                m_NavigateUrl = value
            End Set
        End Property
    End Class

1 Ответ

0 голосов
/ 18 февраля 2011

Проблема в том, что здесь:

<MenuItems>
     <my:MenuItem Text="Test" NavigateUrl="~/Default.aspx" />
</MenuItems>

ASP.net пытается добавить в список MenuItems, он делает это, вызывая

MenuItems.Add(...)

Однако, поскольку m_Items равенНичего, это дает вам ошибку.Чтобы исправить это, замените

Private m_Items As List(Of MenuItem) = Nothing

на

Private m_Items As List(Of MenuItem) = New List(Of MenuItem)()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...