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 转义。返回 aMvcHtmlString以绕过转义:

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

我解决了在辅助函数中添加脚本标记的问题:

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 回答