すべてのページで動的な顧客固有のテキスト置換を行うことができるという要件があります。たとえば、私は「{CarMake}」をページのどこにでも置くことができ、フォードのお客様は「CarMake」を「Ford」、トヨタは「Toyota」などに変更します。カスタムPage.Render関数は、クライアントに出力される直前にレンダリングされたhtmlの置換を行います。PageRequestManagerParserErrorException - カスタムPage.Renderを使用したUpdatePanel
カスタムPage.Renderは基本的にレスポンスフィルタと同じアイデアですが、私は既にEilon Lipton's fantastic explanation of this errorを読んでいますが、これは私の特定のケースでなぜこれが問題なのか混乱しています。
.aspxページのマークアップは、UpdatePanelの中に含まれています
<p>{CarMake}</p>
次にロードされたページのレンダリングされたHTMLが含まれています
<p>Ford</p>
その後、UpdatePanelのは、部分的なポストバックをしたときに、私は(HTMLの初期レンダリングのように)正しく置換されたテキストが含まれているように見える、UpdatePanelのレスポンスの前述の解析エラーが発生しています。
"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);
}
}
私はfalseにEnableEventValidationを設定しようとしたが、それは効果がありません。
応答に正しく置換されたテキストが含まれている場合は、sb.Replaceを実行する必要がありますか? – wazz
@wazz sb.Replaceはテキスト置換を行うものです。 sb.Replace呼び出しの前に、レンダリングされたHTML出力にはまだ{CarMake} – emkayultra
Ahが含まれています。これには、正しく置換されたテキストが含まれますが、コードが実行された後になります。 :\ – wazz