代码之家  ›  专栏  ›  技术社区  ›  Nikola Stjelja

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

  •  7
  • Nikola Stjelja  · 技术社区  · 17 年前

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

    有没有办法在ASP.NET中实现这一点

    6 回复  |  直到 17 年前
        1
  •  11
  •   Atanas Korchev    17 年前

    您可以覆盖页面的呈现方法。然后调用基本实现并提供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);
    }
    
        2
  •  2
  •   Jarrod Dixon IndianaJones    8 年前

    你可以使用 HTTPModule sample .

        3
  •  1
  •   Community Mohan Dere    8 年前

    使用 answer of Atanas Korchev

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

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

    更新面板 对于渲染字符串的确切长度是否为常量,似乎很关键。即,如果您更改字符串并 保持 如果更改文本使字符串长度更改,则会发生上述JavaScript错误。

    我的不完美但可行的解决方案是假设 更新面板 始终进行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);
            }
        }
    }
    

    • 回发时,不会更改任何字符串。
    • 因此,用户看到的字符串是未填充的字符串
    • 更新面板 非回发邮件也可能会被炒鱿鱼。

    see this article discussing UpdatePanel and Page.Render in more details .

        4
  •  0
  •   Martin    17 年前

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

        5
  •  0
  •   Joel Coehoorn    17 年前

    显然,如果您能够首先从ASP.Net中诱使出所需的标记,那么效率会更高。

    考虑到这一点,您是否考虑过使用 Control Adapters ? 它们将允许您首先了解每个控件的渲染方式,而不必在以后修改字符串。

        6
  •  -1
  •   Brian Schmitt    17 年前

    我不认为有一个特定的事件,从网页上,你可以钩到;以下是ASP.Net生命周期: http://msdn.microsoft.com/en-us/library/ms178472.aspx