控件開發學習筆記(一)——ToolboxData含義


新建一個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" />


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM