经常看到这个函数,但不知有何用途
protected override void Render(HtmlTextWriter writer)

解决方案 »

  1.   

    Control.Render 方法将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。protected virtual void Render(
       HtmlTextWriter writer
    );参数
    writer 
    接收服务器控件内容的 HtmlTextWriter 对象。 备注
    在开发自定义服务器控件时,可以重写此方法以生成 ASP.NET 页的内容。有关更多信息,请参见 ASP.NET 服务器控件中的方法。示例
    下面的示例重写 Render 方法,使用 HasControls 方法查看服务器控件是否在其 ControlCollection 对象(可通过 Control.Controls 属性访问)中存储了任何子控件。如果有子控件,它检查集合中的第一个服务器控件是否为文本。如果两个条件都符合,此文本就追加到 HTML 字符串中。
    [C#] 
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] 
    protected override void Render(HtmlTextWriter output) {
        if ( (HasControls()) && (Controls[0] is LiteralControl) ) {
            output.Write("<H2>Your Message: " + ((LiteralControl) Controls[0]).Text + "</H2>");
        }
    }
      

  2.   

    OnPreRender是在你显示页面内容前可以自己增加显示信息
      

  3.   

    看了一下,ASP.NET应用程序的执行流程大体如下:Application_Start(Object sender, EventArgs e)
    Session_Start(Object sender, EventArgs e)
    Application_BeginRequest(Object sender, EventArgs e)
    Application_AuthenticateRequest(Object sender, EventArgs e)this.FrameworkInitialize();
    try
    {
    base.InitRecursive(null);
             //递归执行Init()事件,就是当前控件及其子控件的Init()事件。
             //也就是递归执行控件树的Init()是事件。Load,PreRender与之相似
             //注意OnInit()是方法,而Init()是事件,这一点和Delphi不同。
             
    if (this.IsPostBack)
    {
    this.LoadPageViewState();
    this.ProcessPostData(this._requestValueCollection, true);
    }
    base.LoadRecursive(); if (this.IsPostBack)
    {
    this.ProcessPostData(this._leftoverPostData, false);//获取客户端更新
    this.RaiseChangedEvents();//使类似CheckBox、TextBox等的change事件能触发
    this.RaisePostBackEvent(this._requestValueCollection);//触发定制事件
    } base.PreRenderRecursiveInternal();
    this.SavePageViewState();
    base.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
             // RenderControl->Render(writer)->RenderChildren(writer)
             //没看懂RenderControl是如何执行的,有时间时我慢慢研究一下,不过还是请各位先指教一下。
    }
    catch (ThreadAbortException)
    {
    base.UnloadRecursive(true);
    return;
    }
      

  4.   

    这是控件的输出方法,也就是writer.write(写什么控件就输出什么)详细参考一些讲开发控件的书就明白了.