博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET 自定义控件学习研究
阅读量:6852 次
发布时间:2019-06-26

本文共 3130 字,大约阅读时间需要 10 分钟。

ASP.NET 自定义控件学习研究

1. 学习当然要从最基本的练习HELLOWORLD开始啦。

下面我们就从最简单的示例说起:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Phillip.FAME.ServerControl{    [DefaultProperty("Text")]    [ToolboxData("<{0}:ServerControl1 runat=server>
")] public class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? "[" + this.ID + "]" : s); } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter output) { output.Write(Text); } }}

以上代码就是从VS中创建一个自定义服务器控件后,默认的状态。

从上面的示例可以看出,所有的ASP.NET控件继承与WEBCONTROL类,而示例也简单的显示了一个文本,该控件就像是一个 System.Web.UI.WebControls.Literal 控件一样。

其中我们注意到如何将文本显示到页面的呢?

关键在于我们重写了 WEBCONTROL方法的 RenderContents方法。

该方法将控件的内容呈现到指定的编写器中,HtmlTextWriter,表示要在客户端呈现 HTML 内容的输出流。

由此可以看到这个方法是用来最终定义输入HTML的内容的,所以在开发自定义控件时,一定要注意RenderContents是不是实现了你最终想的HTML输出。

根据这个提示,我们进入下一步:

2. 如何绑定数据到自定义的控件里呢?

比如我们经常会用到一些DROPDOwNLIST,经常需要绑定一些数据库的配置信息,这个时候,页面就需要每次重写哪些烦人的绑定操作。如果现在你学会了自定义控件,就不再那么麻烦了。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Phillip.FAME.ServerControl{    [DefaultProperty("Text")]    [ToolboxData("<{0}:TQBDropDownList runat=server>
")] public class TQBDropDownList : DropDownList { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public Common.Enums.UserTypeEnum Types { get { Common.Enums.UserTypeEnum s = (Common.Enums.UserTypeEnum)ViewState["Types"]; return s; } set { ViewState["Types"] = value; } } protected override void OnPagePreLoad(object sender, EventArgs e) { if (Types == Common.Enums.UserTypeEnum.FirmAdmin) { System.Data.DataTable dt = new System.Data.DataTable(); //you can get data from your database. for (int i = 0; i < dt.Rows.Count; i++) { this.Items.Add(dt.Rows[i]["column"].ToString()); } } base.OnPagePreLoad(sender, e); this.DataBind(); } }}

上面的示例就是一个简单的从数据库读取数据,绑定到DROPDOWNLIST控件中的DEMO。从上面的示例可以很容易看到,最关键的步骤在于OnPagePreLoad方法,那么这里就要认真的考虑,为什么这里不是使用 RenderContents , 而是OnPagePreLoad方法了,原因就在于数据的绑定过程了。

因为DropdownList是继承自ListControls的,所以Items的定义在ListControls中,发现Items在RenderContents方法中被调用了,并且将其生成了最终的HTML代码option.

之前我们说过,RenderContents 是最终对数据的呈现,而我们这里要做的是数据的绑定,所以如果我们把绑定的过程写到这里,那么最终呈现数据时就会发现绑定的数据始终为空值了。

 

 

 

 

转载于:https://www.cnblogs.com/taoqianbao/archive/2013/01/18/2866036.html

你可能感兴趣的文章
下一个目标-百度
查看>>
百度地图API学习之路(2)
查看>>
dell服务器硬盘的状态变成外来(foreign)
查看>>
redhat6.4更换centos 6 的 yum源
查看>>
jsquery问题
查看>>
深入了解android平台的jni---编译ffmpeg源码
查看>>
共享JSP部署后测试代码
查看>>
日常订阅的开发工具和服务——2018年
查看>>
linux下乱码问题及解决方式
查看>>
回车和换行有什么区别?很尴尬》》》
查看>>
Hibernate(十六)数据库事务与隔离级别
查看>>
laravel、lumen遇到的问题解决
查看>>
MYSQL-mysqlslap
查看>>
Cisco ASA5500解决内网用公网IP不能访问DMZ区服务器的
查看>>
Windows7常用命令
查看>>
crack-jar游戏之拉阔
查看>>
Java中的深拷贝和浅拷贝
查看>>
<JQuery>页面加载函数的三种写法
查看>>
大数据系列12:Hadoop2 – 全新的Hadoop
查看>>
Result相关
查看>>