2010-08-18 57 views
0

TL; DR:當用戶控件的Page_Init/Page_Load方法被調用時,在其家庭項目外使用的usercontrol中的所有控件都爲null。當在項目之間使用UserControl時控制爲空

的設置是這樣的:

項目 「UI.Frontend」, 「UI.ControlPanel」 和 「UI.Common」 是 「ASP.NET Web應用程序」 S。 UI.Common永遠不會被直接訪問 - 它只包含前端和控制面板中都需要的UserControl。

所以,在UI.Frontend一個aspx文件(SomeFrontendPage.aspx)包含線路:

<%@ 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具有ID 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" /> 

回答

0

你會發現你有更多的問題,什麼是立即顯示。默認情況下,ASCX文件沒有嵌入到程序集中,如果它們存在,則需要創建一個虛擬路徑提供程序來訪問它們。

我們可以看到一個示例控件嗎?

+0

這可能是我最初使用的註冊彙編方法,因爲我找不到任何方式來共享項目之間的控件,而不會與虛擬目錄搞混。 發佈此問題後,我創建了一個新的解決方案,其中包含兩個空項目和上述設置,以嘗試將此問題與可能出現在我當前工作中的任何其他因素隔離。事實證明,跨項目的東西並不重要 - 「@Register Assembly」不支持跨項目usercontrols。 :( – Fishtoaster 2010-08-18 16:17:11

相關問題