我需要在将ASP.NET发送到客户端之前捕获它的HTML,以便对其进行最后一分钟的字符串操作,然后将修改后的版本发送到客户端。
E.G。
页面已加载 每个控件都已正确呈现 页面的完整html已准备好转移回客户端
ASP.NET中有没有办法
答案 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事件以“调整”控件的值,或者执行一些客户端编辑/回调。