在 Razor 中关闭 HTML 编码
Posted
技术标签:
【中文标题】在 Razor 中关闭 HTML 编码【英文标题】:Turn off HTML Encoding in Razor 【发布时间】: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,并且任何脚本都可以实际运行?
【问题讨论】:
【参考方案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 ***.com/questions/15273327/… 如果您使用的是 RazorEngine,那么相关问题中会涉及到这一点:***.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) => true
已修复 :) IsHtmlSafe -> HtmlSafe以上是关于在 Razor 中关闭 HTML 编码的主要内容,如果未能解决你的问题,请参考以下文章