Управляет нулем при использовании UserControl между проектами - PullRequest
0 голосов
/ 18 августа 2010

TL; DR: все элементы управления в пользовательском контроле, который используется за пределами его домашнего проекта, обнуляются при вызове методов этого пользовательского контроля Page_Init / Page_Load.

Настройка выглядит следующим образом:

Проекты«UI.Frontend», «UI.ControlPanel» и «UI.Common» являются «веб-приложением ASP.NET».UI.Common никогда не предназначен для прямого доступа - он просто содержит элементы UserControl, необходимые как для внешнего интерфейса, так и для панели управления.

Итак, файл aspx (SomeFrontendPage.aspx) в UI.Frontend содержит строки:

<%@ Register tagprefix="BP" Namespace="UI.Common" Assembly="UI.Common" %>

и позже:

<BP:MyControl runat="server" ID="ctlMyControl" />

в то время как в UI.Common есть элемент управления с именем MyControl (обычные файлы ascx, ascx.cs и ascx.designer.cs),Теперь, когда я открываю SomeFrontendPage.aspx в браузере, загружается ctlMyControl и выполняются его методы init + load.Проблема в том, что все субконтроли MyControl никогда не инициализируются.Пример (если MyControl.ascx имеет текстовое поле с идентификатором txtBlah):

    protected void Page_Init(object sender, EventArgs e)
    {
        txtBlah.Text = "test";
    }

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

Редактировать: Примером элемента управления будет:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs" Inherits="Common.MyControl" %>
Whatever: <asp:TextBox ID="txtWhatever" runat="server"  />

1 Ответ

0 голосов
/ 18 августа 2010

Вы можете обнаружить, что у вас больше проблем, чем показано на экране.Файлы ASCX по умолчанию не встроены в сборки, а когда они есть, вам необходимо создать поставщика виртуального пути для доступа к ним.

Можем ли мы увидеть пример элемента управления?

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