Render记录01

1.Render 生成静态页
void Page_Load(){
Response.Charset="";
this.EnableViewState =false;
StringWriter tw=new StringWriter();
HtmlTextWriter wt =new HtmlTextWriter(tw);

string path=@"c:\test.htm";
//FileInfo info =new FileInfo(@"c:\test.txt");
StreamWriter wter = File.CreateText(path);
//输出所有信息
this.RenderControl(wt);
wter.Write(tw.ToString());
//Response.Write(tw.ToString());
wter.Close();
wt.Close();
tw.Close();
Response.End();
//生成相应文件,然后定向到该文件
Response.Redirect(path);
}
2.Render 调用顺序
Public void RenderControl(HtmlTextWriter writer)
{
//判断Visible属性是否为真,如果是,则调用Render方法呈现控件,否则不呈现控件
if(Visible)
{
Render(writer);
}
}
Protected virtual void Render(HtmlTextWriter writer)
{
//在这里写呈现控件本身的代码
…….
//调用RenderChildren方法呈现该控件的子控件
RenderChildren(writer);
}

Protected virtual void RenderChildren(HtmlTextWriter writer)
{
//循环调用每个子控件中的RenderControl方法呈现子控件,递归实现呈现整个页面的控件树
foreach(Control c in Controls)
{
c.RenderControl(writer);
}
}
3.通过重写Render事件,动态添加css
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
StringWriter sw = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(sw);
base.Render(htmlWriter);
//当前用户选择的风格css
string css = "<link href="css url" rel="stylesheet" type="text/css">";
string html = sw.ToString() ;
int startPoint = html.IndexOf("</head>", StringComparison.CurrentCultureIgnoreCase);
if(startPoint > 0)
{
html = html.Insert(startPoint, css);
}
writer.Write(html) ;
}
4.通过重写Render实现服务器控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace UsingRenderControl
{
[DefaultProperty("LinkUrl")]
[ToolboxData("<{0}:RenderControl runat=server></{0}:RenderControl>")]
public class RenderControl : Control
{
// 实现LinkUrl
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("http://localhost/")]
[Localizable(true)]
public string LinkUrl
{
get { String s = (String)ViewState["LinkUrl"];
return ((s == null) ? String.Empty : s);}
set { ViewState["LinkUrl"] = value; }
}
// 重写Render方法
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, LinkUrl);
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red");
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write("浏览网站");
writer.RenderEndTag();
}
}
}
使用
<Sample:RenderControl runat="server" ID="CustomerControl" LinkUrl="http://www.microsoft.com/">
</Sample:RenderControl>

说明:页面加载完后,render的信息输出到页面。一个页面可有多于一个的Form。
以上内容参考网上资料

posted on 2009-04-18 19:50  路人  阅读(220)  评论(0编辑  收藏  举报

导航