新建一個ASP.NET服務器控件項目,Visual Studio自動產生如下的代碼:
namespace WebControlLibrary
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:HelloWorld runat=server></{0}:HelloWorld>")]
public class HelloWorld : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
剛開始接觸ASP.NET控件和組件開發,第1個疑問就是DefaultProperty 、ToolBoxData分別是什么含義?
[DefaultProperty("Text")]
[ToolboxData("<{0}:HelloWorld runat=server></{0}:HelloWorld>")]
DefaultProperty是設置控件默認的屬性的。
ToolBoxData的意思是當你將這個控件從工具箱中拖放到WebForm中時在aspx文件的HTML代碼中添加的對該控件的定義。
這里面的{0}表示什么意思?
控件的標記的前綴
就是你拖這個控件到頁面上時候
他就自動添加<{0}:HelloWorld runat=server></{0}:HelloWorld>,這個{0}是你定義的。
那究竟{0}如何定義呢?
修改Visual Studio自動產生的代碼,增加下面的一行
[assembly: TagPrefix("WebControlLibrary", "aspNet")]
namespace WebControlLibrary
{
//其他代碼不變
}
重新生成控件項目。
新建網站,把新生成的控件拖到新建的Web窗體上,切換到源視圖狀態,可以看到控件定義標記為:
<aspNet:HelloWorld ID="HelloWorld1" runat="server" />
其中的aspNet正是我們用[assembly: TagPrefix("WebControlLibrary", "aspNet")]定義的。
同時,在頁面上部可以看到如下的標記:
<%@ Register assembly="WebControlLibrary" namespace="WebControlLibrary" tagprefix="aspNet" %>
再查一下msdn,TagPrefixAttribute的基本使用:
public TagPrefixAttribute(
string namespaceName,
string tagPrefix
)
當然,自定義ASP.NET服務器控件TagPrefix,也可以修改網站的Web.config文件:
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="WebControlLibrary" namespace="WebControlLibrary" tagPrefix="AspNet"/>
</controls>
這樣,拖動控件到頁面上時,控件的tagPrefix為AspNet:
<AspNet:HelloWorld ID="HelloWorld1" runat="server" />