日期:2014-05-17  浏览次数:20356 次

请教一下, protected override void Render
正在学习源代码,其中一个方法(位于BasicPage:system.web.ui.page里),就是这个

 protected override void Render(HtmlTextWriter writer)
  {
  StringWriter sw = new StringWriter();
  HtmlTextWriter htmlw = new HtmlTextWriter(sw);
  base.Render(htmlw);
  htmlw.Flush();
  htmlw.Close();
  string pageContent = sw.ToString();
  pageContent += @"<div align='center'><a href='http://www.v5soft.com' title='v5soft软件提供'>Powered by v5soft.com</a></div>";
  Response.Write(pageContent);
  }
因为BasicPage:system.web.ui.page,所以把一些公共配置放到这里,这个方法到底是干什么的有什么用,请高手们帮忙下,谢谢了

------解决方案--------------------
在原来正常的html后边再加入一些字符。这里就是所谓的“软件提供”信息。

不过,这个方法输出的是烂html,已经不是一个完整的html了。它靠浏览器的容错来保证。

假设一个比较专业的asp.net设计师,不应该这样写代码。他完全可以在Page_prerender事件中在Page.Controls中添加自己的LiteralControl,没有必要去重写什么Render方法。
------解决方案--------------------
如果页面有<%%>脚本控件的话,就用这种方法来追加html

C# code

  protected override void Render(HtmlTextWriter writer)
    {
        form1.SetRenderMethodDelegate(delegate(HtmlTextWriter htw, Control ctl)
        {
            var ctls = ctl.Controls;
            for (int i = 0, count = ctls.Count; i < count; i++)
            {
                ctls[i].RenderControl(htw);
            }
            htw.Write("<div>版权信息</div>");
        });
        base.Render(writer);
    }