设置自定义ASP.NET服务器控件TagPrefix的几种方法

这两天看《道不远人-----深入解析ASP.NET2.0控件开发》这本书,看完第二章内容后,想总结下“设置自定义ASP.NET服务器控件TagPrefix的几种方法”,以便以后查阅,以下面code编写的控件为例,由于重点不是控件编写,所以写了个非常简单的控件,姑且叫它EmailInput

 


 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel;
 4using System.Text;
 5using System.Web;
 6using System.Web.UI;
 7using System.Web.UI.WebControls;
 8
 9namespace ServerControl
10{
11    [ToolboxData("<{0}:EmailInput runat=server></{0}:EmailInput>")]
12    public class EmailInput : CompositeControl
13    {
14        protected RegularExpressionValidator _regValidator;
15        protected RequiredFieldValidator _rqrValidatator;
16        protected TextBox _input;
17        protected override HtmlTextWriterTag TagKey
18        {
19            get
20            {
21                return HtmlTextWriterTag.Div;
22            }

23        }

24        protected override void CreateChildControls() 
25        {
26            Controls.Clear();
27            _input = new TextBox();
28            _input.ID = "txtEmail";
29
30            _rqrValidatator = new RequiredFieldValidator();
31            _rqrValidatator.ID = "rqvEmail";
32            _rqrValidatator.ErrorMessage = "请输入邮件地址";
33            _rqrValidatator.Text = "*";
34            _rqrValidatator.Display = ValidatorDisplay.Dynamic;
35            _rqrValidatator.ControlToValidate = _input.ID;
36
37            _regValidator = new RegularExpressionValidator();
38            _regValidator.ID = "revEmail";
39            _regValidator.Display = ValidatorDisplay.Dynamic;
40            _regValidator.ErrorMessage = "邮件格式错误";
41            _regValidator.Text = "*";
42            _regValidator.ValidationExpression = @"/w+([-+.']/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*";
43            _regValidator.ControlToValidate = _input.ID;
44
45            this.Controls.Add(_input);
46            this.Controls.Add(_rqrValidatator);
47            this.Controls.Add(_regValidator);
48
49            ChildControlsCreated = true;
50        }

51    }

52}

 

方法一、在Web.config中配置,具体做法为:在Web.config文件的System.web节中添加如下代码


1<pages>
2  <controls>
3     <add assembly="ServerControl" namespace="ServerControl" tagPrefix="sc"/>
4  </controls>
5</pages>

         说明:assembly表示控件所在的程序集名称,namespace表示控件的命名空间,tagPrefix就是我们所要设置的项了

方法二、在使用该控件的页面添加<%Register%>指令,如下


1<%@ Register assembly="ServerControl" namespace="ServerControl" tagprefix="sc" %>

 说明:assembly表示控件所在的程序集名称,namespace表示控件的命名空间,tagPrefix就是我们所要设置的项了

方法三、通过装饰Attribute来指定tagPrefix,例如在控件类添加如下Attribute


[assembly: TagPrefix("ServerControl", "scsc")]
namespace ServerControl
{
    [ToolboxData("
<{0}:EmailInput runat=server></{0}:EmailInput>")]
    public class EmailInput : CompositeControl
    {

说明:即使这样定义了,每个页面也都要添加<%Register%>指令,这样只是提供了统一的tagPrefix,实质上还是第二种方法

方法四、在控件项目中添加属性文件"Assembly.cs"中添加如下代码来自定义控件的前缀:


using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Web.UI;
[assembly: TagPrefix("ServerControl","scsc")]

说明:即使这样定义了,每个页面也都要添加<%Register%>指令,这样只是提供了统一的tagPrefix,实质上还是第二种方法

 

最后对上面的四种方法进行说明:

  • 在Web.config中进行自定义是属于应用程序级别的定义,只注册一次即可对整个应用程序有效。其他三种方法都得在引用该控件的页面添加<%Register%>指令
  • asp.net定义tagPrefix的检测顺序是:assemblyInfo.cs---->控件中的attribute装饰----->webconfig中的配置,也就是说,如果这几种方法您都设置了,那么asp.net 将会采用webconfig的设置方式!相信这也是asp.net覆盖的简单道理了!
  • asp.net的自带控件采用了第一种方法,即在 web.config中进行了配置,将tagPrefix配置成了asp,如果您看着不爽,可以改掉它。

你可能感兴趣的:(服务器,assembly,asp.net,input,asp)