自定义控件分两种:简单控件与组合控件
一.简单控件
1.直接从现有的服务器控件继承,比如:myControl:Button
这样的好处是简单方便,不用自己再额外写属性与事件,坏处是性能不高,因为里面有太多的我们不需要的东西。
2.从Control或WebControl继承
这样子就相当于将控件从头写一遍。比如:
public class MyTextBox : System.Web.UI.Control, System.Web.UI.IPostBackDataHandler
{
public string Text
{
get { return (string)ViewState["text"]; }
set { ViewState["text"] = value; }
}
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string oldValue = Text;
string newValue = postCollection[this.UniqueID];
if (oldValue == null || oldValue != newValue)
{
Text = newValue;
return true;
}
return false;
}
public void RaisePostDataChangedEvent() { }
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
StringBuilder sb = new StringBuilder();
sb.Append("");
writer.Write(sb.ToString());
}
}
在这里,我们需要重写Render方法。它主要负责控件的呈现,因为我们知道,不管哪种控件,到了客户端一律变成Html代码。在这段代码的最上面是它的一个属性,当然,你也可以跟它加上自定义事件。
这个控件实现了IPostBackDataHandler接口,于是就实现了IsPostBack功能。LoadPostData是主事件,由它来验证值是否发生了变化。从Text属性中我们可以访问旧值,从postCollection集合内我们可以访问新值。如果发生了变化,就返回True,否则返回false
由于在这个控件内实现了IsPostBack,在页面输入完成后按下回车键,所做的操作就是回发,而不是重新刷新页面。
二.组合控件
从CompositeControl继承
也是两种思路:直接组合服务器控件或者完成手写
1.直接组合服务器控件
public class MyInput:CompositeControl
{
private TextBox _textBox;
private Label _labal;
private Button _button;
protected override void CreateChildControls()
{
_textBox = new TextBox();
_textBox.ID = "my1";
this.Controls.Add(_textBox);
_labal = new Label();
_labal.ID = "my2";
this.Controls.Add(_labal);
_button = new Button();
_button.ID = "my3";
Controls.Add(_button);
_button.Click += new EventHandler(_button_Click);
}
void _button_Click(object sender, EventArgs e)
{
_labal.Text = _textBox.Text;
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_textBox.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_labal.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_button.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
}
在CreateChildControls()事件中将服务器控件进行生成与注册,在Render事件中生成Html代码。在这里,是调用控件的RenderControl方法直接生成代码。
2手写。
那就是直接在Render事件把调用服务器自带的RenderControl方法换成自己手写的代码就可以了,同样,需要自己定义属性与方法,事件。
分享到:
相关推荐
浅析五大ASP.NET数据控件据控件
浅析asp.net页面跳转,希望对大家有帮助:)
【ASP.NET编程知识】浅析ASP.NET万能JSON解析器.docx
浅析ASP.NET程序设计课程教学改革.pdf
浅析ASP.NET生成随机密码,可以实现网上通过邮箱激活功能。让你的网站多姿多彩。
浅析基于asp.net的网站安全漏洞及防范 pdf
针对网络安全中出现的一些问题,介绍在sql注入式攻击、查询串式数据传递、绕过登录直接进入页面、输入框中输入恶意代码、数据库等几方面存在的漏洞,并对这些漏洞进行分析,提出一些防范建议,适合网管人员学习。
前些天在做注册页面的验证的时候,用了下ASP.net的验证控件,有一些体会,特写下这篇博客,如果有朋友有不同ideas,欢迎大家留言
ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格...
OLEDB 讀取EXCEL(XLS、XLSX)到DataTabel,簡單的Demo; ASP.NET
【ASP.NET编程知识】浅析Repeater控件的使用 (原样导出和动态显示隐藏Repeater中的列).docx
在.NET Framework中提供了许多控件,可以解决编程中用户界面的设计和实现,但在实际应用中可能需要对系统提供的控件进行改进,如下拉列表不能折行显示。本文将介绍用VB.NET实现下拉列表折行显示。
【ASP.NET编程知识】ASP.net处理XML数据实例浅析.docx
浅析基于ASP.NET的网站SQL注入攻击及防范措施.pdf
本文介绍ASP.NET安全性是Web 应用程序中一个非常重要的方面,它涉及内容非常广泛,以及介绍讲述如何利用IIS以及Forms 身份验证构建安全的
ASP.NET 中 Session 实现原理浅析 如 session的说明 使用等等
VB.NET语言经过长时间的发展,很多用户都很了解VB.NET语言了,这里我发表一个关于VB.Net语言 复制、删除文件的例子,和大家一起分享一下。
ASP.NET笔试题浅析 33条C#、.Net经典面试题目及答案 及其他很常见的asp.net的笔试与面试问题