【问题标题】:MVC Url Helper generate &ampMVC Url Helper 生成 &amp
【发布时间】:2012-06-05 23:44:15
【问题描述】:

我有这个帮手:

    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”字符?? 我尝试使用“MvcString”retun,但结果是一样的

感谢您的帮助!

【问题讨论】:

    标签: c# model-view-controller url


    【解决方案1】:

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

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

    谢谢!

    【讨论】:

      【解决方案2】:

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

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

      将转义设为默认设置,并要求明确选择退出,极大地提高了开发人员没有想到转义的所有地方的安全性。

      【讨论】:

      • 您的建议并不能解决问题。请注意,渲染位于
      【解决方案3】:

      改成

       public static HtmlString Test(this UrlHelper helper)
      

      【讨论】:

      • 您的建议并不能解决问题。请注意,渲染位于
      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多