Доброе!
Есть проблема с сабжем.
Разработал значит я сложный ascx, в котором в частности в ascx части нахолятся контролы:
...
<asp:UpdatePanel ID="m_UpdatePanel" runat="server">
<ContentTemplate>
<asp:Panel id="m_pnlMainView" runat="server">
....
</asp:Panel>
<asp:Panel id="m_pnlErrorView" runat="server">You are not authorized to view this content. Please contact system administrator.</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
В ascx.cs:
protected void Page_Load(object sender, EventArgs e)
{
if (CheckAccess())
{
m_pnlErrorView.Visible = false;
m_pnlMainView.Visible = true;
....
}
}
Все пишу в 2010 студии. Протестировал, все работает как надо. Паблишу его в отдельные DLL, подключаю эти DLL в тестовый сайт, делаю референс
<%@ Register assembly="App_Web_swfcourse.ascx.cdcab7d2" namespace="MyNamespace" tagprefix="uc1" %>
потом ложу контрол на форму
<body>
<form id="form1" runat="server">
<div>
<uc1:MyControl runat="server" />
</div>
</form>
</body>
Запускаю и получаю System.NullReferenceException: Object reference not set to an instance of an object. at MyNamespace.MyControl.Page_Load(Object sender, EventArgs e)
После добавления трейсов выясняется, что CheckAccess() в коде отрабатывает нормально а вот панелька m_pnlErrorView есть NULL. Вопрос — почему?
Делал все в соответствии с
http://msdn.microsoft.com/en-us/library/aa479318.aspx
Но явно либо чего-то недоделал либо чего-то недопонимаю.
С уважением,
nickstaves
Здравствуйте, nickstaves, Вы писали:
N>Но явно либо чего-то недоделал либо чего-то недопонимаю.
Вы написали user control. User control используется путем копирования, и регистрируется директивой
<%@ Register TagPrefix="myControls" TagName="MyControl" Src="Controls/MyControl.ascx" %>
используется потом так:
<myControls:MyControl id="id" runat="server" />
Есть способ заставить контрол скомпилироваться в dll и использовать подобно custom control'у, но с ним очень много сложностей, и он не стоит затраченных усилий.
... << RSDN@Home 1.2.0 alpha 5 rev. 1536>>