自定义控件分两种:简单控件与组合控件
一.简单控件
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 数据控件是开发Web应用程序时用于展示和操作数据的重要工具。在这篇文章中,我们将深入探讨五大ASP.NET数据控件:GridView、DetailsView、FormView、Repeater和DataList,了解它们的特点和应用场景。 首先...
浅析 ASP.NET 页面跳转 ASP.NET 页面跳转是一种常见的Web开发技术,涉及到页面间数据传递的方法。本文将讨论 ASP.NET 页面跳转的五种方法,分别是使用 Querystring 方法、隐藏域、ViewState、Cookie 和 Application...
在本篇博客中,我们将详细探讨***的两种主要验证控件:数据格式验证控件(RegularExpressionValidator)和自定义验证控件(CustomValidator)。 首先,数据格式验证控件(RegularExpressionValidator)允许开发者...
3. **用户控件和自定义控件**:为了提高代码复用性,ASP.NET允许开发者创建用户控件和自定义控件。这些控件可以在多个页面或项目中使用,减少重复代码,提高开发效率。 4. **样式表和脚本管理**:对于多频道网站,...
1. **GridView使用大全.cs** - GridView是ASP.NET中用于展示数据的控件,它能够方便地绑定到数据源并实现数据的编辑、排序、分页等功能。这个文件可能包含如何配置GridView,自定义列,处理事件,以及如何进行数据...
在ASP.NET编程中,GridView控件是用于展示数据表格的常用组件,特别是在Web应用程序中用于显示和编辑数据。然而,在处理日期和时间数据时,如何正确格式化它们以便用户友好的展示是一个常见的问题。本文将深入浅出地...
为了改变或自定义这一行为,ASP.NET提供了一些方法。一种方法是通过设置form元素的`defaultButton`属性,指定希望响应回车事件的按钮。例如: ```html ``` 这里,`defaultButton`属性的值应设置为目标按钮的ID。...
ASP.NET提供了多种缓存机制,包括页面级输出缓存、片段缓存(用户控件输出缓存)和数据缓存等。 **页面级输出缓存**是最常见的一种缓存方式,它保存的是整个页面的HTML输出。当新的请求到来时,如果页面仍在缓存...
GridView是ASP.NET Web Forms中的一种数据绑定控件,用于显示和编辑表格数据。这个文件可能包含了如何配置、定制和操作GridView的各种方法,包括绑定数据源、添加分页、排序、筛选等功能,以及处理事件和自定义模板...
- 防止SQL注入攻击(SQLIA),通过使用数据库参数对象或自定义方法转换输入参数,使注入的SQL语句无效化。 - 验证用户输入,主要由客户端验证负责,并以服务器端验证作为辅助。 - 使用哈希算法保存密码,如*** ...
在ASP.NET开发中,Repeater控件是一种非常实用的服务器控件,用于呈现数据源中的数据,具有高度自定义的灵活性。本篇文章主要探讨了如何使用Repeater控件进行原样导出数据以及如何动态地显示或隐藏Repeater中的列。 ...
在.NET开发中,GridView控件是ASP.NET网页中常用的数据展示工具,它可以方便地呈现数据库或其他数据源中的数据。在处理包含时间日期字段的数据时,可能会遇到如何正确格式化显示日期的问题。本文将深入探讨在...