MVC 网址帮助程序生成和

本文关键字:程序生成 帮助 MVC | 更新日期: 2023-09-27 18:36:06

我有这个助手:

    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"重新调整,但结果是一样的

感谢您的帮助!

MVC 网址帮助程序生成和

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

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

将转义作为默认值,并需要明确的选择退出,大大提高了开发人员没有想到转义的所有位置的安全性。

将其更改为

 public static HtmlString Test(this UrlHelper helper)

我在帮助程序函数中添加脚本标签时遇到了问题:

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 在标签值内对结果进行编码。

谢谢!