2011-10-18 16 views
0

元のプログラマーがデータバインディングに関連しないページで<%# ... %>を使用しているコードがいくつか出てきました。これは、ページに文字列を出力するために使用されています。これは安全ですか? <%#<%=、この場合は<%:のように振る舞いますか?データバインディング以外の方法で<%#を使用すると安全です

+1

Page.DataBindが呼び出されていませんか? –

+1

右。 DataBindが呼び出されない場合、何も出力されません。 –

+0

ネストされたマスターページを使用しているときにコンテンツプレースホルダにダイナミックリンクURLを配置するときの記述と同様のテクニックを使用しました。ネストされたプレースホルダを含むプレースホルダに動的コード( '<%=')があると、ASP.NETはエラーを返します。これを '<%#Page.ResolveUrl ... 'に置き換えることで、両方のシナリオをサポートするコードビハインドでPage.DataBindを呼び出すことができます。素晴らしい解決策ではありませんが、うまくいきます。 –

答えて

1

この場合<% =または<%よう<%の#振る舞うことを行いますか?

タグ内のコードがResponse.Write()などを明示的に呼び出す場合のみ。

1

<%... ...%>の式が評価され、文字列に変換されます。結果はコントロールのプロパティに割り当てられ、コントロールがない場合はDataBoundLiteralControlが追加されます。それは安全ですか?はい。最初にページにアクセスすると、ASP .Netで解析され、新しいクラスが生成され、これらのブロックのコードを含むアセンブリにコンパイルされます。


は、それがその、HtmlTextWriter.Write法で使用され、どのような、<% = ...%>の間で前と同じように作用するが、結果は、任意のプロパティに割り当てられていませんbtwはvoidを返すので、データバインディング式で使用しようとするとうまくいきません。これは、両構築物において使用することができます

:何について


評価された文字列がSystem.Web.HttpUtility.HtmlEncode経由でエンコードされたHTMLであるため、安全であるプラス。 したがって、データバインディングの構造体<%#またはライター構造<%(=なし)で使用することができます。 、コンパイルエラーを与えるショー完全コンパイルソースをクリックし、その行に移動します構築物における


ヒント
書き込み何か。ブラックボックスはもはやブラックボックスではありません。

関連する問題