我有这个帮手:
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&par2=2" type="text/javascript"></script>
但我需要:
<script src="/Test?par1=1&par2=2" type="text/javascript"></script>
为什么要添加“&amp; amp”字符? 我试图使用“MvcString”重新调整,但结果是相同的
感谢您的帮助!
答案 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会在结果标记值内对结果进行编码。
谢谢!