我有一個能夠在每個頁面上都有動態客戶特定文本替換的要求。例如,我可以將「{CarMake}」放在一個頁面的任何位置,並且它會將我們的福特客戶的「{CarMake}」更改爲「Ford」,將豐田等的「Toyota」更改爲我們正在做的Page.Render函數,它將在輸出到客戶端之前對呈現的html進行替換。PageRequestManagerParserErrorException - 具有自定義Page.Render的UpdatePanel
自定義的Page.Render與Response Filter基本相同,我已經閱讀Eilon Lipton's fantastic explanation of this error,但我仍然爲這個問題感到困惑,因爲這是我的特殊情況。
在.aspx頁面標記包含,一個UpdatePanel內:
<p>{CarMake}</p>
然後加載頁面的呈現HTML包含:
<p>Ford</p>
然後,當在UpdatePanel做了局部回傳,我我得到了UpdatePanel的響應的上述解析錯誤,該錯誤似乎包含正確替換的文本(就像HTML的初始渲染一樣):
"1|#||4|2325|updatePanel|UpdatePanelCars|...<p>Ford</p>..."
因此,如果呈現的HTML完全一樣,爲什麼會造成問題?客戶端解析如何檢測差異?
僅供參考,做替換的代碼是這樣的:
class TemplatedPage: System.Web.UI.Page
{
...
protected override void Render(HtmlTextWriter writer)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter hWriter = new HtmlTextWriter(sw);
base.Render(hWriter); //obtain full html markup, still containing {} at this point
sb.Replace("{CarMake}", "Ford");
//other Replacements...
string alteredPageContents = sb.ToString();
writer.Write(alteredPageContents);
}
}
我已經嘗試設置EnableEventValidation爲false,但沒有效果。
如果響應包含正確替換的文本,您是否需要執行sb.Replace? – wazz
@wazz sb.Replace是什麼在做文本替換。在sb.Replace調用之前,呈現的HTML輸出仍然包含{CarMake} – emkayultra
啊。它包含正確替換的文本,但在代碼運行後。 :\ – wazz