ASP.NET在将页面的HTML发送到客户端之前修改它的HTML

时间:2008-11-10 15:34:20

标签: asp.net html

我需要在将ASP.NET发送到客户端之前捕获它的HTML,以便对其进行最后一分钟的字符串操作,然后将修改后的版本发送到客户端。

E.G。

页面已加载 每个控件都已正确呈现 页面的完整html已准备好转移回客户端

ASP.NET中有没有办法

6 个答案:

答案 0 :(得分:9)

您可以覆盖页面的Render方法。然后调用基础实现并提供HtmlTextWriter对象。这是一个例子

protected override void Render(HtmlTextWriter writer)
{
    StringWriter output = new StringWriter();
    base.Render(new HtmlTextWriter(output));
    //This is the rendered HTML of your page. Feel free to manipulate it.
    string outputAsString = output.ToString();

    writer.Write(outputAsString);
}

答案 1 :(得分:2)

您可以使用HTTPModule更改html。这是sample

答案 2 :(得分:0)

查看ASP.NET页面生命周期中的事件序列。 Here's一个列出事件的页面。您可以在页面的生命周期中找到一个事件处理得足够晚,以进行更改,但仍然可以呈现这些更改。

如果没有,您可以随时编写一个HttpModule,在页面本身完成渲染后处理HTTP响应。

答案 3 :(得分:0)

显然,如果您可以首先从ASP.Net中哄骗所需的标记,效率会更高。

考虑到这一点,你考虑过使用Control Adapters吗?它们将允许您首先覆盖每个控件的呈现方式,而不必在以后修改字符串。

答案 4 :(得分:0)

使用answer of Atanas Korchev几天,我发现我收到的JavaScript错误类似于:

  

“无法解析从服务器收到的消息”

与ASP.NET Ajax UpdatePanel control结合使用时。 The reason is described in this blog post

基本上UpdatePanel似乎对渲染字符串的确切长度是恒定的。即如果更改字符串并保持长度,则成功,如果更改文本以使字符串长度更改,则会发生上述JavaScript错误。

我的不完美但工作的解决方案是假设UpdatePanel总是进行POST并过滤掉:

protected override void Render(HtmlTextWriter writer)
{
    if (IsPostBack || IsCallback)
    {
        base.Render(writer);
    }
    else
    {
        using (var output = new StringWriter())
        {
            base.Render(new HtmlTextWriter(output));

            var outputAsString = output.ToString();
            outputAsString = doSomeManipulation(outputAsString);

            writer.Write(outputAsString);
        }
    }
}

这适用于我的场景,但有些缺点可能不适用于您的场景:

  • 回发后,不会更改任何字符串。
  • 因此,用户看到的字符串是未经操作的字符串
  • UpdatePanel也可以触发非回传。

不过,我希望这有助于其他发现类似问题的人。另外,see this article discussing UpdatePanel and Page.Render in more details

答案 5 :(得分:-1)

我认为页面中没有特定的事件可以挂钩;这是ASP.Net生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx

您可能需要考虑挂钩到prerender事件以“调整”控件的值,或者执行一些客户端编辑/回调。