做一个最简单的Web控件

原文:刘武|做一个简单的web控件

上一篇了解了asp.net服务器控件的生命周期,本篇来做一个最简单的实例。

首先建立新项目Liuwu.Net.WebControls,用来存放我所有的自定义控件。

然后在项目上右击,并选择添加>新建项,这里我们选择Web自定义控件,并为该控件命名为MyHyperLink,该控件将是一个类似这样的超链接:Welcome To Liuwu.Net

 Visual Studio 将为我们生成以下的模板:

namespace Liuwu.Net.WebControls
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:MyHyperLink runat=server></{0}:MyHyperLink>")]
    public class MyHyperLink : WebControl
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }
 
            set
            {
                ViewState["Text"] = value;
            }
        }
 
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

很多东西现在还不懂,不过没关系,现在我们只要明白控件开发的最终目的也就是将HTML代码输出到客户端,而RenderContents方法就是完成这个任务的。看看上面那个超链接,她的HTML代码是不是应该是 <a href="http://www.liuwu.net" target="_blank">Welcome To Liuwu.Net</a>呢,那我们只要在RenderContents方法中输入该代码就可以了。

以下是一种实现方式

[DefaultProperty("Text")]
[ToolboxData("<{0}:MyHyperLink runat=server></{0}:MyHyperLink>")]
public class MyHyperLink : WebControl
{
 
    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write("<a href=\"http://www.liuwu.net\""+
            "target=\"_blank\">Welcome To Liuwu.Net</a>");
    }
}

这里用了HtmlTextWriter的Write方法直接输出HTML代码(为了显示方便,这里将字符串拆开了)。

编译该项目,并添加网站,在工具栏中就能看到刚才编写的控件了,直接拖到页面上就可以使用,具体过程就不在累赘了。

除了该方法,我们还可以利用服务器控件的RenderControl方法输出控件

HtmlGenericControl a = new HtmlGenericControl("a");
a.Attributes.Add("href", "http://www.liuwu.net");
a.Attributes.Add("target", "_blank");
a.InnerText = "Welcome To Liuwu.Net";
a.RenderControl(output);
注意这里要引入System.Web.UI.HtmlControls命名空间,和第一种方法比起来,该方法显然没那么容易出错,不过也不是十全十美。

下面再介绍第三种方法

output.AddAttribute(HtmlTextWriterAttribute.Href,
                                 "http://www.liuwu.net");
output.AddAttribute(HtmlTextWriterAttribute.Target, "_blank");
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write("Welcome To Liuwu.Net");
output.RenderEndTag();
这里分别使用了HtmlTextWriterAttribute和HtmlTextWriterTag枚举,进一步避免了出错的可能。不过要注意,如果要为标签添加属性,则必须在RenderBeginTag方法之前调用AddAttribute方法。

 

参考:庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

你可能感兴趣的:(Web)