9

.Net 4.0 は、Attributes.Add を使用してクライアント側のイベントを asp.net オブジェクトに追加するときに一重引用符をエンコードしています。以前のバージョンでは、これは起こりませんでした。

例えば ​​:

<asp:Image runat="server" ID="imgTest" ImageUrl="~/DateControl/cal.gif" />

 imgTest.Attributes.Add("onmouseover", "alert('Hello')");

クライアント側の出力を見ると、

 <img id="ctl00_MainContent_calFromTimeStamp1_imgTest" onmouseover="alert(&#39;Hello&#39;)" src="../DateControl/cal.gif" style="border-width:0px;" />

カスタム エンコーダーを作成することで回避策を見つけました:カスタム エンコーディング ルーチンを作成しますが、この問題のために Web サイト全体のエンコーディングを停止したくありません。回避策やこれを修正する方法を知っている人はいますか?

4

6 に答える 6

4

Microsoft によると、JavaScript を を使用して HTML 属性に追加するべきではありませんWebControl.Attributes.Add()。属性値をエンコードするからです。

Attributes コレクションを使用してクライアント側スクリプトを WebControl インスタンスに追加することはできません。クライアント側スクリプトを追加するには、Page コントロールの ClientScript プロパティを使用します。

ソース

Page.ClientScript.RegisterExpandoAttribute(string controlId, string attributeName, string attributeValue, bool encode) メソッドを使用することをお勧めします。あなたの場合、次のようになります。

Page.ClientScript.RegisterExpandoAttribute(
  imgTest.ClientID, 
  "onmouseover", 
  "alert('Hello')", 
  false /* Do not encode */
);

これにより、クライアント側属性を設定する JavaScript がページ内に作成されます。

于 2013-08-06T11:49:27.963 に答える
0

imgTest.Attributes.Add("onmouseover", "alert(\'Hello\')");

于 2013-08-06T11:41:46.193 に答える
0

属性のエンコードをオフにすることはお勧めしません。デフォルトでエンコーディングを防ごうとすると、将来的にコードで多くの奇妙な動作が発生する可能性があり、悪い慣行の代償を払う必要があります。

.NET は常に属性をエンコードして、悪意のあるスクリプトの挿入を阻止しています。したがって、プログラムを保護するために、この既定の方法に従う必要があります。

于 2014-04-23T17:18:30.550 に答える
-3

引用符の前にエスケープ文字を使用できます。

ソース :

this.Attributes.Add("onmouseover", string.Format("$(this).attr(\'src\',\'{0}\')",this.Page.ClientScript.GetWebResourceUrl(typeof(SwapImage), urlenabledkey)));

与える :

onmouseover="$(this).attr('src','/WebResource.axd?d=kHY3FE9nMsUOvDU-pPthg4KQvVrnXlcASyA7dFf6L
于 2015-01-03T12:59:54.243 に答える