4

文字列変数を JavaScript に渡す必要がある MVC ビューがありますが、その文字列変数には単一引用符が含まれています ( ')。私はこのようなことをしようとしています

<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');" 
                            class="button-link">change</a>

homeAddress には一重引用符があり、JavaScript に完全な値を渡すことができるように、何らかの方法で回避する必要があります。

4

5 に答える 5

12

Ajaxヘルパーを使用できます:Ajax.JavaScriptStringEncode(string strToEncode)

于 2011-02-20T22:19:24.010 に答える
4

文字列をエスケープして Javascript 文字列リテラルにするには、バックスラッシュを 2 つのバックスラッシュに置き換え、文字列区切り文字をバックスラッシュと区切り文字に置き換えます。

<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>

注:javascript:プロトコルは、イベント ハンドラとしてではなく、URL にスクリプトを配置するときに使用されます。

編集:
スクリプトに HTML エンコードが必要な文字も含まれている場合は、Javascript 文字列をエスケープした後に行う必要があります。

<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>

そのため、文字列に何が含まれているかわからない場合は、安全のために、最初に文字列リテラルをエスケープする必要があります。次に、コードを HTML エンコードして、HTML タグの属性に配置できるようにします。

于 2009-12-22T19:34:16.897 に答える
0

すべての一重引用符 (および必要に応じて他の文字) をバックスラッシュでエスケープするメソッドを記述して、javascript によって誤解されないようにすることができます。

于 2009-12-22T19:35:57.240 に答える
0

homeAddress を URL としてエンコードする必要があります。MVC には、これを行うためのヘルパーが組み込まれています: UrlHelper.Encode(string url) - 一重引用符を%27

于 2009-12-22T19:38:04.393 に答える
-1

テストする時間はありませんが、HtmlHelper.Encode(string s) を見てください。それはあなたのためにエスケープを処理するかもしれません。

于 2009-12-22T19:33:35.103 に答える