MVC Url Helper生成&

时间:2012-05-31 17:24:47

标签: c# model-view-controller url

我有这个帮手:

    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>

为什么要添加“&amp; amp”字符? 我试图使用“MvcString”重新调整,但结果是相同的

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

从帮助程序返回的任何正常string都将被html转义。返回MvcHtmlString以绕过转义:

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

通过明确选择退出来转义默认值,可以大大提高开发人员不会想到的所有地方的安全性。

答案 1 :(得分:1)

将其更改为

 public static HtmlString Test(this UrlHelper helper)

答案 2 :(得分: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会在结果标记值内对结果进行编码。

谢谢!