2009-10-14 64 views
1

我想創建我的第一個從面板派生的ASP.net服務器控件。出於某種原因,即使應用程序能夠識別我的控件的類和名稱空間,我也無法使.aspx頁面識別我的服務器標記。如何讓ASP.NET識別我的自定義服務器控件?

下面是我使用的步驟:

1)我創造,我已經放在我的site_code目錄類CollapsablePanel。我正在使用Web App而不是Web站點,因此App_Code對我來說真的不可用。

Namespace webstation.WebControls 

    Public Class CollapsablePanel 
     Inherits System.Web.UI.WebControls.Panel 


    End Class 

End Namespace 

2)在.aspx文件我已經添加<%@註冊的TagPrefix = 「webstation」 命名空間= 「MyApplication.webstation.WebControls」 %>

我已經建立了項目,但我自定義標籤前綴不會出現。如果我只是繼續並輸入編輯器不會引發錯誤,但是當我發佈它並嘗試訪問它時,頁面會發生錯誤。如果我嘗試從代碼隱藏(Imports MyApplication.webstation.WebControls)訪問類,則自定義控件將顯示在intellisense中,所以我知道Visual Studio正在某種程度上讀取類信息。

我在這裏做錯了什麼?任何想法都不勝感激。

邁克

回答

0

我能得到它的工作像預期有一次我去進取,在同創建一個類庫項目解決方案,構建該項目,從類庫中的bin複製DLL並將其放置在Web項目的文件夾中,該文件夾用於保存外部二進制文件。我還在項目中添加了對.dll的引用。一旦我做到了,那麼語法:

<%@ Register Assembly="webstation.WebControls" Namespace="webstation.WebControls" TagPrefix="webstation" %> 

開始工作。有誰知道,如果我能夠以某種方式自動更新在我的Web項目中編譯的.DLL從同一解決方案中的類庫?或者我每次都必須進入bin文件夾並手動將其複製到Web項目中?

感謝,

邁克

2

好像你可能會丟失標記名屬性 作爲

<%@ Register TagPrefix="webstation" TagName="CollapsiblePanel" Namespace="MyApplication.webstation.WebControls" %> 

,一旦你這樣做,你應該能夠訪問它

<webstations:CollapsiblePanel id='usercontrol1" runat="server" /> 
+0

我不知道我應該有標記名,我想它來提供,我將在命名空間的所有類,而不必單獨註冊每一個。 另外,ASP.net上的教程視頻不使用TagName: http://www.asp.net/learn/videos/video-297.aspx – mclark1129 2009-10-14 17:34:21

+0

如果您想註冊* all *的類在給定的命名空間中,我相信你需要在@Register指令中提供程序集屬性。所以像Assembly =「MyApplication.webstation.WebControls」,假設WebControls是一個生成DLL作爲輸出的項目。 – 2009-10-14 17:51:34

+0

你是對的MIke,你不需要指定標記名,但你需要指定程序集。我剛剛嘗試過,它在我爲我的dll添加程序集屬性之後起作用 – 2009-10-14 17:58:29

1

退房斯科特谷的關於註冊控件的博客文章,我喜歡自己在web.config文件中註冊它們。 http://weblogs.asp.net/scottgu/archive/2006/11/26/tip-trick-how-to-register-user-controls-and-custom-controls-in-web-config.aspx

您需要確保您具有控件類的完全限定參考,這意味着庫名稱和命名空間。我將我的控件放在類庫中,但可以將它們包含在App_Code文件夾中。您還可以註冊在web.config用戶控件,這兩個例子如下:

相關問題