Render()和FrameworkInitialize()方法的迷惑
页面的FrameworkInitialize()方法如下:
protected override void FrameworkInitialize()
{
__BuildControlTree(this);
base.FileDependencies = __fileDependencies;
base.EnableViewStateMac = true;
base.Request.ValidateInput();
}
private void __BuildControlTree(Control __ctrl)
{
IParserAccessor iParserAccessor = __ctrl;
iParserAccessor.AddParsedSubObject(new LiteralControl("<html>\r\n<head>\r\n<title>dddd</title>\r\n</head>\r\n<body>\r\n"));
//按顺序创建各个页面控件......
iParserAccessor.AddParsedSubObject(new LiteralControl("\r\n</body>\r\n</html>"));
}
而我们在建立页模板时往往这样写:
public class PageBase : System.Web.UI.Page
{
//......
protected override void Render(HtmlTextWriter writer)
{
//创建html及body标签
writer.Write(@"
<html>
<head>
<title>" + Title + @"</title>
</head>
<body>");
//调用基类的Render方法
base.Render( writer );
//结束body和html节点
writer.Write(@"
</body>
</html>");
}
}
为什么FrameworkInitialize()方法中添加了<html>、<body>
iParserAccessor.AddParsedSubObject(new LiteralControl("<html>\r\n<head>\r\n<title>dddd</title>\r\n</head>\r\n<body>\r\n"));
Render()方法还要这样做:
writer.Write(@"
<html>
<head>
<title>" + Title + @"</title>
</head>
<body>");
//调用基类的Render方法
base.Render( writer );
肯定添加<html>、<body>是执行了一次,但却为什么两个方法中都有呈现<html>、<body>的代码?