【转】【Asp.Net】asp.net服务器控件创建

VS新建一个Web服务控件工程,会默认生成以下代码:

复制代码
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文件:

复制代码
<configuration>
    <system.web>
      <pages>
        <controls>
          <add assembly="WebControlLibrary" namespace="WebControlLibrary" tagPrefix="AspNet"/>
        </controls>
      </pages>
    </system.web>
</configuration>
<!--也可以在使用的页面添加下面这句进行注册控件-->
<%@ Register assembly="WebControlLibrary" namespace="WebControlLibrary" tagprefix="aspNet" %>
复制代码

这样,拖动控件到页面上时,控件的tagPrefix为AspNet:

<AspNet:HelloWorld ID="HelloWorld1" runat="server" />

 

原文地址:http://www.cnblogs.com/zhouhb/archive/2012/04/16/2452783.html

 

posted on   梦琪小生  阅读(348)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示