1

私はこのヘルパーを持っています:

    public static class TestHelper
    {
        public static string Test(this UrlHelper helper)
        {
            var ret = "/Test?par1=1&par2=2";

            return ret;
        }
    }

_Layout.cshtml ビューから呼び出します

<script src="@Url.Test()" type="text/javascript"></script>

レンダリングされた結果は次のとおりです。

<script src="/Test?par1=1&amp;par2=2" type="text/javascript"></script>

しかし、私は必要です:

<script src="/Test?par1=1&par2=2" type="text/javascript"></script>

「&」文字を追加する理由は?? 「MvcString」retun を使用しようとしましたが、結果は同じです

ご協力ありがとうございました!

4

3 に答える 3

3

stringヘルパーから返された法線は、html エスケープされます。a を返してMvcHtmlStringエスケープをバイパスします。

public static MvcHtmlString Test(this UrlHelper helper)
{
    var ret = "/Test?par1=1&par2=2";
    return MvcHtmlString.Create(ret);        
}

明示的なオプトアウトが必要なエスケープをデフォルトにすることで、開発者がエスケープを考えなかったすべての場所のセキュリティが大幅に向上します。

于 2012-05-31T17:28:15.910 に答える
1

それをに変更します

 public static HtmlString Test(this UrlHelper helper)
于 2012-05-31T17:27:52.620 に答える
0

ヘルパー関数に script タグを追加する際の問題を解決しました。

public static class TestHelper
    {
        public static HtmlString Test(this UrlHelper helper)
        {
            var ret = "/Test?par1=1&par2=2";

            var scriptTag = string.Format("<script src=\"{0}\" type=\"text/javascript\"></script>", ret);

            return new HtmlString(scriptTag);
        }
    }

しかし、結果がタグ値内にある場合、Razor が結果をエンコードする理由がわかりません。

ありがとうございました!

于 2012-06-01T06:46:25.843 に答える