[英]ASP.NET modifing the HTML of a page before it is sent to the client
我需要在將ASP.NET發送到客戶端之前捕獲它的HTML,以便對其進行最后一分鍾的字符串操作,然后將修改后的版本發送到客戶端。
例如
加載頁面每個控件都已正確呈現頁面的完整html已准備好轉移回客戶端
在ASP.NET中有沒有辦法解決這個問題
您可以覆蓋頁面的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);
}
您可以使用HTTPModule來更改html。 這是一個例子 。
使用Atanas Korchev的答案幾天,我發現我得到的JavaScript錯誤類似於:
“無法解析從服務器收到的消息”
與ASP.NET Ajax UpdatePanel
控件一起使用時。 原因在此博客文章中描述 。
基本上, 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
也可以觸發非回發。 不過,我希望這有助於其他發現類似問題的人。 另外, 請參閱本文,更詳細地討論UpdatePanel
和Page.Render
。
看一下ASP.NET頁面生命周期中的事件序列。 這是列出事件的一頁。 您可以在頁面的生命周期中找到一個事件來處理這個事件,以便進行更改,但仍然可以渲染這些更改。
如果沒有,您可以隨時編寫一個HttpModule,在頁面本身完成渲染后處理HTTP響應。
顯然,如果你可以首先從ASP.Net中哄騙所需的標記,效率會更高。
考慮到這一點,您是否考慮過使用控制適配器 ? 它們將允許您首先覆蓋每個控件的呈現方式,而不必在以后修改字符串。
我不認為頁面中有特定事件可以掛鈎; 這是ASP.Net生命周期: http : //msdn.microsoft.com/en-us/library/ms178472.aspx
您可能需要考慮掛鈎到prerender事件以“調整”控件的值,或執行一些客戶端編輯/回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.