Добавление элемента управления на панель приводит к ошибке «Ссылка на объект не установлена ​​для экземпляра объекта» - PullRequest
2 голосов
/ 17 октября 2011

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

Сначала у меня есть страница (test.aspx):

<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:Panel ID="Panel1" runat="server">
    </asp:Panel>
    </form>
</body>
</html>

код позади:

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TestUserControl uc = new TestUserControl();
        Panel1.Controls.Add(uc);
        //this is where the error happens:
        uc.Fill();
    }
}

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

    <asp:Panel ID="pnlTest" runat="server" >
    </asp:Panel>

и код позади:

public partial class TestUserControl: System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    public void Fill()
    {
        Label lbl = new Label();
        lbl.Text = "test";
        //This is where pnlTest is null and I get "Object Reference Not Found..."
        pnlTest.Controls.Add(lbl);
    }
}

Итак ... Это похоже на точку, в которой я вызываю Fill() перед отображением пользовательского элемента управления, поэтому pnlTest не был создан.Но я не уверен, где вызывать uc.Fill () из test.aspx ... Я пробовал Page_PreRenderComplete, но это тоже не сработало ...

(если вы видите неправильное имясоответствует ... это, вероятно, не ошибка ... имена были изменены, чтобы защитить невинных)

Ответы [ 2 ]

8 голосов
/ 17 октября 2011

ура, я могу ответить на свой вопрос.Я изменил test.aspx.cs так:

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        TestUserControl uc = (TestUserControl)Page.LoadControl("~/UserControls/TestUserControl.ascx");
        Panel1.Controls.Add(uc);
        uc.Fill();
    }
}
0 голосов
/ 13 марта 2018

У меня была похожая проблема. Оказывается, система не смогла найти ссылку на объект, потому что он не был структурирован / включен в файл [filename].aspx.designer.cs.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...