【问题标题】:How can i manipulate the page while it is rendering?如何在呈现页面时对其进行操作?
【发布时间】:2010-09-12 17:43:08
【问题描述】:

我想在页面离开服务器时更改一些元素文本(page_render、endRequest 等)。

如何访问页面以及如何找到元素以更改其值、文本?

【问题讨论】:

    标签: asp.net webpage-rendering


    【解决方案1】:

    您可以通过使用HttpModule 来做到这一点。这位于管道中,可以进行预处理和后处理。

    例如看看这个whitespaceremover

    【讨论】:

    • 对于其他发现这一点的人:虽然这是一个有效的示例实际上不要使用链接模块...它弊大于利,并且节省了非常 带宽很小,因为您应该 提供压缩后的页面 :)
    【解决方案2】:

    除了 HttpModules,您还可以覆盖“Render”方法(或在基本页面中执行此操作以使其可重用)。

    protected override void Render(HtmlTextWriter writer )
    {
        StringWriter stringWriter = new StringWriter();
        HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
    
        base.Render(htmlWriter);
    
        string html = stringWriter.ToString();
    
        // do stuff with the html
    
        writer.Write(html);
    } 
    

    【讨论】:

      【解决方案3】:

      有许多选项,您将在很大程度上取决于实际目标是什么。

      1. 处理页面的 PreRender 事件并在此事件中调整您想要的任何元素。理想情况下,您会将其放在一个基类中,该基类由需要此处理的所有页面继承。这使您可以访问实际的页面模型和控件树。
      2. 设置一个过滤器,让您可以直接访问响应流。您可以通过 2 种方式实现这一点,或者作为安装过滤器的单独 HttpModule,或者您可以直接从 Global.asax 安装过滤器。您选择哪种路由取决于您需要的可重用程度,其中 HttpModule 是最可重用的。

      这是一篇不错的文章Modifying the HTTP Response Using Filters

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 2018-08-09
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        相关资源
        最近更新 更多