在 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) =&gt; true 已修复 :) IsHtmlSafe -> HtmlSafe

以上是关于在 Razor 中关闭 HTML 编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在页面中关闭当前tab

不要在鼠标向上事件中关闭模式

SonarLint 提示“关闭这个'FileReader'”,当我关闭时实际上在finally块中关闭了它

如何在 gradle 启动测试中关闭关闭挂钩的输出?

怎样在ubuntu中关闭iptables

eclipse如何在workspace中关闭、打开project?