惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
Cloudbric
Cloudbric
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
小众软件
小众软件
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
博客园 - 【当耐特】
I
InfoQ
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
O
OpenAI News
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
量子位
宝玉的分享
宝玉的分享

博客园 - 小乔的闺房

学习ID,ClientID,UniqueID 基础知识1 (2)最简单的Remoting程序 (1)将对象序列化为bin,soap,xml (4)迭代器 (3)集合接口 (1)学习数组,集合,IEnumerable接口,引申学习迭代器 (2)学习集合,引申学习索引器和泛型 FindControl实现原理 location详解 使用ASP.NET AJAX实现(图片)幻灯片效果 固定GridView列字符串长度,多于的用...代替 读取Excel数据到GridView相关问题(待完善) 说明nchar(10),char(10),nvarchar(10),varchar(10) syscolumns 获得数据库里所有表的名称 类[属性扩展],属性[属性扩展](待完善) 获得数据库表的列数 WebForm里弹出警告框之内的自定义类MessageBox
自定义服务器控件(1)整体把握(未完待续)
小乔的闺房 · 2007-10-30 · via 博客园 - 小乔的闺房

(1)自定义服务器控件继承下面3个类之一
Control
WebControl
CompositeControl

1.1 Control呈现过程
语法

[BindableAttribute(true)]
[ThemeableAttribute(false)]
public class Control : IComponent, IDisposable, IParserAccessor,
    IUrlResolutionService, IDataBindingsAccessor, IControlBuilderAccessor, IControlDesignerAccessor, IExpressionsAccessor
说明
protected internal virtual void Render(HtmlTextWriter writer)
{
    this.RenderChildren(writer);
}
protected internal virtual void RenderChildren(HtmlTextWriter writer)
{
    ICollection children = (this._occasionalFields == null) ? null : ((ICollection) this._occasionalFields.Controls);
    this.RenderChildrenInternal(writer, children);
}
一般流程和ASP.net AJAX 1.0分歧就在这里了
internal void RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
{
    //是Asp.net Ajax处理
    if ((this.RareFields != null) && (this.RareFields.RenderMethod != null))
    {
        writer.BeginRender();
        this.RareFields.RenderMethod(writer, this);
        writer.EndRender();
    }
    else if (children != null)
    {
        //不是Asp.net Ajax处理,将执行foreach依次对所有的子控件进行遍历
        foreach (Control control in children)
        {
            control.RenderControl(writer);//完成子控件的呈现过程
        }
    }
}
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);
        }
    }
}

private void RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
{
    if (adapter != null)
    {
        adapter.BeginRender(writer);
        adapter.Render(writer);
        adapter.EndRender(writer);
    }
    else
    {
        this.Render(writer);
    }
}

1.2 WebControl呈现过程
语法

[ThemeableAttribute(true)]
public class WebControl : Control, IAttributeAccessor
说明
1 WebControl.Render方法
  (1)大多数情况下,自定义服务器控件开发人员需重写此方法.
  (2)重写了基类的Render,首先调用WebControl.RenderBeginTag方法,然后调用WebControl.RenderContents方法,最后调用WebControl.RenderEndTag方法来将控件发送到客户端.
2 WebControl.RenderContents方法
  (1)大多数情况下,自定义服务器控件开发人员需重写此方法.
  (2)呈现开始和结束标记之间的控件内容
3 WebControl.RenderBeginTag方法
  (1)
4 WebControl.RenderEndTag方法
  (1)

1.3 CompositeControl呈现过程
语法
public abstract class CompositeControl : WebControl, INamingContainer, ICompositeControlDesignerAccessor
说明
不得不说的3个方法
1 Control.EnsureChildControls方法
  (1)大多数情况下,自定义服务器控件开发人员不需重写此方法.
  (2)确定服务器控件是否包含子控件.如果不包含,则创建子控件.
  (3)该方法首先检查ChildControlsCreated属性的当前值.如果此值为假,则调用CreateChildControls方法.
2 Control.CreateChildControls方法
  (1)大多数情况下,自定义服务器控件开发人员需重写此方法.
  (2)由ASP.NET页面框架调用,以通知使用基于合成的实现的服务器控件创建它们包含的任何子控件,以便为回发或呈现做准备.
3 CompositeControl.Render方法
  (1)大多数情况下,自定义服务器控件开发人员需重写此方法.
  (2)将CompositeControl内容写入指定的HtmlTextWriter对象,以便在客户端上显示.
  (3)此方法重写基实现,以确保先创建Controls集合中的所有子控件,然后使用Control.Render和Control.RenderChildren基方法呈现控件及其所有子控件.