【问题标题】:Turn off HTML Encoding in Razor在 Razor 中关闭 HTML 编码
【发布时间】:2011-06-25 19:14:38
【问题描述】:

我有一个返回 JavaScript 和/或 HTML 的 sn-p 的函数。

static public string SpeakEvil()
{
    return "<script>alert('BLAH!!');</script>";
}

在视图中,Razor 完全正确地对其进行了 HTML 编码,正如大多数人所期望的那样。

@StaticFunctions.SpeakEvil()

我如何让 Razor not HTML 对此进行编码,以便逐字发出 HTML 和 JavaScript,并且任何脚本都可以实际运行?

【问题讨论】:

    标签: asp.net-mvc razor html-encode


    【解决方案1】:

    您可以使用Raw() 函数,但它主要用于来自数据库的内容。

    对于像你这样的助手,我建议返回 IHtmlString

    static public IHtmlString SpeakEvil() {
        return new HtmlString("<script>alert('BLAH!!');</script>");
    }
    

    这样您就不必在每个呼叫站点都致电Raw()

    【讨论】:

    • 我在非 Web 应用程序中使用 RazorEngine。您提出的两种解决方案都不适合我,事实上,Html.Raw 方法调用给了我以下异常:“无法编译模板。名称‘Html’在当前上下文中不存在”。如果我有 MvcHtmlString 或 IHtmlString,它仍然会 html 对文本进行编码,但不会引发异常。
    • 我在 Web 应用程序之外使用 RazorEngine,但无法使其工作:( 有什么想法吗?
    • @blesh & leypascua stackoverflow.com/questions/15273327/… 如果您使用的是 RazorEngine,那么相关问题中会涉及到这一点:stackoverflow.com/questions/15273327/…
    【解决方案2】:

    使用Html.Raw 助手。

    @Html.Raw(StaticFunctions.SpeakEvil())
    

    【讨论】:

      【解决方案3】:

      通过调用MvcHtmlString.Create() 方法返回MvcHtmlString(继承自HtmlString),如下所示:

      public static MvcHtmlString SpeakEvil()
      {
          return MvcHtmlString.Create("<script>alert('BLAH!!');</script>");
      }
      


      你也可以把它变成一个字符串扩展:

      public static MvcHtmlString HtmlSafe(this string content)
      {
          return MvcHtmlString.Create(content);
      }
      


      来源:
      http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx

      【讨论】:

      • Nitpick,但是当我看到一个以“Is”开头的方法时,我认为该方法回答了一个问题。即IsDecimal(0m) =&gt; true
      • 已修复 :) IsHtmlSafe -> HtmlSafe
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2014-03-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多