做一个最简单的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);
下面再介绍第三种方法:
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();