我有一个能够在每个页面上都有动态客户特定文本替换的要求。例如,我可以将“{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