2008-11-20 284 views
2

如何創建自定義控件(而不是ASCX控件),更重要的是,在您的項目中使用它?我不想創建一個單獨的項目或將它編譯爲DLLASP.NET自定義控件

回答

8

服務器控件應該被編譯成一個DLL。應該沒有理由害怕在項目中進行額外的組裝,這有助於創建良好的項目組織。

ASP.NET服務器控件實際上是程序集中的自定義類。他們沒有與他們關聯的「ascx」標記文件。

要使用ASP.NET服務器控件,您需要告訴ASP.NET在哪裏查找其類。

首先,創建一個類庫項目並將其添加到您的解決方案,我會打電話給我的「CustomControls.dll」。

一旦出現,添加一個簡單的類是你的三夏:

public class Hello : System.Web.UI.WebControl 
{ 
    public override Render(HtmlTextWriter writer) 
    { 
     writer.Write("Hello World"); 
     base.Render(writer); 
    } 
} 

生成項目,並將其添加爲您主要網絡項目的引用。

現在,在您要使用該控件的ASPX頁面,需要註冊,所以將其添加爲在ASPX第一行Page指令後:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %> 

現在,你應該有一個名爲<的控件示例:您好,您可以使用>。在intellisense中顯示可能需要一分鐘。

+0

非常感謝!這不僅解決了我的問題,而且幫助我成爲了一名開發人員。 – 2008-11-20 19:09:05

1

爲控件創建類並生成解決方案。如果一切順利,控制器現在可以在工具箱上使用。

有時VS不更新工具箱。如果出現這種情況Register指令添加到頁面:

<%@ Register Assembly="NAME_OF_THE_ASSEMBLY" Namespace="NAMESPACE_OF_THE_CUSTOM_CONTROL" TagPrefix="cc1" %> 

然後只需在頁面上使用控制:

<cc1:mycustompanel id="MyCustomPanel1" runat="server"><asp:TextBox id="TextBox1" runat="server"></asp:TextBox></cc1:mycustompanel> 
1

如果你不想要一個* .ascx文件,你不想要一個單獨的項目,並且你不想要一個* .dll文件,你認爲剩下的是什麼?代碼必須在某個地方居住。

1

你提到你想避免創建一個單獨的項目。正如其他答覆所指出的那樣,僅僅創建一個新項目來存儲自定義控件並引用它就更爲常見了。這是可能的,但是,登記在同一項目中定義的控制,使用常規語法:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly="CustomControls" %> 

凡「集結號」是其中兩個控制和頁面所在的裝配。如果您使用的是Web應用程序項目,而不是Web站點,這會更容易。