首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在输出之前修改整个ASP.NET页面内容?

如何在输出之前修改整个ASP.NET页面内容?
EN

Stack Overflow用户
提问于 2009-10-16 19:39:42
回答 5查看 16.1K关注 0票数 10

我有一个页面,上面有很多用户控件。我希望能够直接在我的代码中替换“宏”或“占位符”的内容。这并不重要,但我正在使用Ektron作为我的CMS。

在将呈现的页面内容发送到客户端之前,是否有任何页面事件可以与之挂钩以对整个呈现的页面内容执行字符串替换?

更新

下面是我目前用来完成这一任务的代码:

代码语言:javascript
复制
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);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-16 19:45:48

您是否尝试过重写呈现方法?

代码语言:javascript
复制
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()););
}
票数 8
EN

Stack Overflow用户

发布于 2009-11-08 01:21:36

您可以使用两种方法:

  1. 这与公认的答案相似。但是,我建议在BasePage中重写render方法,并从中派生出所有模板。
  2. 使用HttpModule或Global.asax,并将过滤器附加到响应对象。对我来说,这具有更多的美学意义,因为“过滤器”属性应该帮助您过滤输出,这正是您想要的!
票数 6
EN

Stack Overflow用户

发布于 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/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1580022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档