Asp.net自定义控件开发任我行(3)-Render
摘要
上一篇我们讲到了自定义标签TagPrefix用法,此篇我们来讲一下控件的呈现,主要是呈现下拉框
内容
呈现的方法有,Render,RenderControl,RenderChildren,这三个方法,其实我也最近才搞明白的,生怕自己忘记,所以就在记下来了,以前学Asp.net页面生命周期的时候,对这些更是一知半解,对此是耿耿于怀,如鲠在喉 ,现在总算是把疑问解决了。
我们先来看看这三个方法底层的实现方法吧,下面是Control类的呈现方式
protected internal virtual void Render(HtmlTextWriter writer)
{
this.RenderChildren(writer);
} protected internal virtual void RenderChildren(HtmlTextWriter writer)
{
ICollection children = this._controls;
this.RenderChildrenInternal(writer, children);
} internal void RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
{
if ((this.RareFields != null) && (this.RareFields.RenderMethod != null))
{
writer.BeginRender();
this.RareFields.RenderMethod(writer, this);
writer.EndRender();
}
else if (children != null)
{
foreach (Control control in children)
{
control.RenderControl(writer);
}
}
} [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public virtual void RenderControl(HtmlTextWriter writer)
{
this.RenderControl(writer, this.Adapter);
} protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
{
if (!this.flags[0x10] && !this.flags[0x200])
{
HttpContext context = (this.Page == null) ? null : this.Page._context;
if ((context != null) && context.TraceIsEnabled)
{
int bufferedLength = context.Response.GetBufferedLength();
this.RenderControlInternal(writer, adapter);
int num2 = context.Response.GetBufferedLength();
context.Trace.AddControlSize(this.UniqueID, num2 - bufferedLength);
}
else
{
this.RenderControlInternal(writer, adapter);
}
}
else
{
this.TraceNonRenderingControlInternal(writer);
}
} private void RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
{
try
{
this.BeginRenderTracing(writer, this);
if (adapter != null)
{
adapter.BeginRender(writer);
adapter.Render(writer);
adapter.EndRender(writer);
}
else
{
this.Render(writer);
}
}
finally
{
this.EndRenderTracing(writer, this);
}
}
代码是不是太长啦。。。看得很烦。说穿了,他们的调用顺序是:首先调用RenderControl方法,RenderControl方法里面调用Render方法,Render方法调用RenderChildren方法,RenderControl也是通过一个循环遍历子控件,每遍历一次调用RenderControl一次,直到子控件全部被遍历完。
详情请见:http://wenku.baidu.com/view/13db1afdfab069dc502201b9.html
一般情况下,我们都只重写Render方法,其他两个方法最好别碰。
现在我们来呈现一个下拉框,我们来分析一下,下拉框,我们可以理解为一个Div,其实我们最主要的目的就是呈现一个下拉框
using System;
using System.Text;
using System.Web.UI;
using System.ComponentModel;//包含组件开发所必须含有的(属性)Attribute;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic; namespace XYB.Controls
{
public class TextEdit:TextBox
{
private int _dropDwonHeight;
[Description("下拉框的高度"),//属性的描述
Category("下拉框")//所属目录
]
public int DropDwonHeight
{
get { return _dropDwonHeight; }
set { _dropDwonHeight = value; }
}
private int _dropdwonWidth;
[Description("下拉框的宽度"),
Category("下拉框")
]
public int DropdwonWidth
{
get { return _dropdwonWidth; }
set { _dropdwonWidth = value; }
} protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Panel pnlDropDown = new Panel();
pnlDropDown.ID = "pnlDropDownID";
pnlDropDown.Height = DropDwonHeight;
pnlDropDown.Width = DropdwonWidth;
pnlDropDown.Style["border"] = "1px solid #ccc";//设置边框样式
pnlDropDown.RenderControl(writer);//把下拉框呈现到网页上
}
}
}

本章结束,
下集预告
ViewState视图保存属性状态,敬请大家关注我!
Asp.net自定义控件开发任我行(3)-Render的更多相关文章
- Asp.net自定义控件开发任我行(4)-ViewState保存控件状态
摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...
- Asp.net自定义控件开发任我行(2)-TagPrefix标签
摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...
- Asp.net自定义控件开发任我行(附1)-属性一览众山小
元数据属性应用于服务器控件及其成员,从而提供由设计工具.ASP.NET 页分析器.ASP.NET 运行库以及公共语言运行库使用的信息.当页开发人员在可视化设计器中使用控件时,设计时属性能改进开发人员的 ...
- Asp.net自定义控件开发任我行(8)-数据集绑定
摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...
- Asp.net自定义控件开发任我行(5)-嵌入资源上
摘要 上一篇我们讲了VitwState保存控件状态,此章我们来讲讲嵌入css文件,js文件,嵌入Image文件我也一笔带过. 内容 随着我的控件的完善,我们目标控件DropDwonCheckList最 ...
- Asp.net自定义控件开发任我行(1)-笑傲江湖
1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...
- Asp.net自定义控件开发任我行(7)-注册自定义事件
摘要 前面我们已经把嵌入资源讲完了,不知道大家有没有得到收益,本章主要讲自定义事件,也就是给TextBox注册一个点击事件. 引言 不知道道上的朋友有没有注意到TextBox控件没有点击事件,就连网上 ...
- Asp.net 自定义控件开发相关的几种嵌入资源解决方案
前提: 如下将要介绍的几种类型资源都要在其属性页窗口, 将 <生成操作> 属性, 设置为[嵌入的资源], 如图: ► 给自定义控件添加自定义图标的几种方案 方法一: 直接在自定义控 ...
随机推荐
- CSS实现下拉菜单的几种方法
PS:转自https://www.cnblogs.com/yewenxiang/p/6064117.html 第一种:display:none和display:block切换 1 <!DOCTY ...
- 构建第一个Spring Boot2.0应用之application.properties和application.yml(八)
本节学习在项目中配置文件配置的方式,一种是通过applicaiton.properties,一种是通过application.yml方式. 一.环境: IDE:IntelliJ IDEA 2017.1 ...
- nbtscan ip地址
查找网络(192.168.1.0)中netbios名字信息,对应命令如下: nbtscan 192.168.1.1-254 找到有netbios名字后,可以使用如下的命令查看这些主机运行的服务. nb ...
- 解析ASPX网页__doPostBack分页的网页table数据
由于急于上线的功能要去客服系统里抓取数据进行验证,客服方面又没有时间开发EDI接口给到我,所以用了本办法:爬人家web系统上的数据进行分析. 由于客服的web系统用ASP.Net的__doPostBa ...
- POJ - 3111 K Best(二分)
包含一些ai和bi的集用S来表示,x = max(sigma(ai)/sigma(bi),i 属于S) ,k 表示S的大小,k= |S|. x和k之间具有单调性.k0 < k1 → x0 ≥ x ...
- hdu-1856 More is better---带权并查集
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1856 题目大意: 一个并查集 计算每个集合的元素 找出元素最多的那个集合,输出元素的个数 解题思路: ...
- Android(java)学习笔记87:Android音视频MediaRecorder用法
1. Android语音录制可以通过 MediaRecorder 和 AudioRecorder: MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语 ...
- NSAutoreleasePool & thread
https://developer.apple.com/documentation/foundation/nsautoreleasepool An object that supports Cocoa ...
- apache的安全增强配置(使用mod_chroot,mod_security)
apache的安全增强配置(使用mod_chroot,mod_security) 作者:windydays 2010/8/17 LAMP环境的一般入侵,大致经过sql注入,上传webshel ...
- lsscsi 与 cat /proc/scsi/scsi
[root@localhost ~]# lsscsi[0:0:0:0] disk SEAGATE ST300MM0048 N001 /dev/sda [0:0:2:0] ...