控件开发学习笔记(一)——ToolboxData含义
2013-12-16 15:54
381 查看
新建一个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" />
拣尽寒枝不肯栖,寂寞沙洲。
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" />
拣尽寒枝不肯栖,寂寞沙洲。
相关文章推荐
- 如何执行一条命令在C#里面。Process
- 『MongoDB』集合更新操作
- ZOJ-1489
- js采用map取到id集合组,并且点击一行选中一行
- ADF VO知识
- 方正文祥E520硬盘保护卡还原卡软件使用要点讲解
- ANDROID -- sp,wp,RefBase 使用
- linux定时任务 掉mysql 存储过程
- ios coredate使用(下篇)
- awk题目
- URL Management(网址管理)
- WEB性能测试工具
- UML建模语言入门-视图,事物,关系,通用机制
- java字节流与字符流的区别
- JSP向数据库中插入记录并返回记录id
- fmt标签用法及详解
- 比较使用 EXISTS 和 IN 的查询
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化
- Domino9下通过代理实现WEB方式重置Internet密码
- Android SlidingMenu 开源项目使用示例(一)