我有一个页面,上面有很多用户控件。我希望能够直接在我的代码中替换“宏”或“占位符”的内容。这并不重要,但我正在使用Ektron作为我的CMS。
在将呈现的页面内容发送到客户端之前,是否有任何页面事件可以与之挂钩以对整个呈现的页面内容执行字符串替换?
更新
下面是我目前用来完成这一任务的代码:
protected override void Render(HtmlTextWriter writer)
{
string content = string.Empty;
using (var stringWriter = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
// render the current page content to our temp writer
base.Render(htmlWriter);
htmlWriter.Close();
// get the content
content = stringWriter.ToString();
}
// replace our placeholders
string newContent = content.Replace("$placeholder1$", "placeholder1 data").Replace("$placeholder2$", "placeholder2 data");
// write the new html to the page
writer.Write(newContent);
}发布于 2009-10-16 19:45:48
您是否尝试过重写呈现方法?
protected override void Render(HtmlTextWriter writer)
{
StringBuilder htmlString = new StringBuilder(); // this will hold the string
StringWriter stringWriter = new StringWriter(htmlString);
HtmlTextWriter tmpWriter = new HtmlTextWriter(stringWriter);
Page.Render(tmpWriter);
writer.Flush();
writer.Write(DoReplaceLogic(htmlString.ToString()););
}发布于 2009-11-08 01:21:36
您可以使用两种方法:
发布于 2009-10-16 19:46:55
您看过生命周期中的PreRender事件吗?
在此事件发生之前: ·page为每个控件和页面调用EnsureChildControls。 ·设置DataSourceID属性的每个数据绑定控件都调用其DataBind方法。 ·页面上的每个控件都会发生PreRender事件。使用该事件对页或其控件的内容进行最终更改。
我相信这是你最不可能做这种事的地方。下一个事件是SaveStateComplete,,根据文档,它具有以下行为:
在发生此事件之前,已为页和所有控件保存了ViewState。此时对页面或控件的任何更改都将被忽略。使用此事件执行需要保存视图状态但不对控件进行任何更改的任务。
来源:https://www.c-sharpcorner.com/UploadFile/8911c4/page-life-cycle-with-examples-in-Asp-Net/
https://stackoverflow.com/questions/1580022
复制相似问题