Webフォームに HTMLコードをエクスポートすると「危険な可能性のある Request.Form 値がクライアント から検出されました。」のエラーが発生する (HTMLタグを含むコードをテキストボックスに表示する) - ASP.NET

概要

HTMLのコードがテキストボックスに表示され、テキストボックス内のHTMLコードをコピーして、 他の編集画面(ブログの編集画面やHTMLエディタなど)にペーストできるUIを作成したい場合があります。

この際、サーバーコントロールのTextBoxコントロールのTextプロパティにHTMLのコードの文字列を設定すると、そのページでポストバックされた際に 「危険なコードがポストバックされました」「危険な可能性のある Request.Form 値がクライアント から検出されました。」のエラーが発生する場合があります。
RunAt="Server" を設定したHTMLコントロールの value プロパティにHTMLのコードを設定した場合もにも同様のエラーが発生します。

対処法

この現象を回避する方法は、LiterlControl等に、Inputタグを含めてHTMLのコードを書き出す方法で対応できます。
テキストボックスを選択した際にテキストボックスの内容をすべて選択するように、JavaScriptのコード onfocus="this.select()" も合わせて書き出します。

コード例

string ExportTag = string.Format(
  "<iframe style=\"background:transparent;\" width=\"{0:d}\" height=\"{1:d}\"
  frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" scrolling=\"no\" src=\"{2:s}\">
  <iframe>",
  rect.Width, rect.Height, handlerUrl);

ExportTag = ExportTag.Replace("<", "&amp;lt;"); 
ExportTag = ExportTag.Replace(">", "&amp;gt;"); 
ExportTag = ExportTag.Replace("\"", "&amp;quot;");

Literal_Export.Text = string.Format(
  "<input id=\"Text_Export\" class=\"EmbedTextBox\" type=\"text\"
  readonly=\"readonly\" ReadOnly=\"True\" onfocus=\"this.select()\"
  value=\"{0:s}\" />", ExportTag);
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-01-24
作成日: 2009-10-01
iPentec all rights reserverd.