关闭Razor中的HTML编码

Dam*_*yer 23 asp.net-mvc html-encode razor

我有一个返回JavaScript和/或HTML片段的函数.

static public string SpeakEvil()
{
    return "<script>alert('BLAH!!');</script>";
}
Run Code Online (Sandbox Code Playgroud)

在视图中,正如大多数人所期望的那样,Razor对它进行了非常正确的HTML编码.

@StaticFunctions.SpeakEvil()
Run Code Online (Sandbox Code Playgroud)

我如何使用Razor 而不是 HTML对此进行编码,以便逐字地发出HTML和JavaScript,并且任何脚本实际运行?

mar*_*ind 51

您可以使用该Raw()功能,但它主要用于来自数据库的内容.

对于像你这样的帮手,我会建议你回复IHtmlString:

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

这样你就不必Raw()在每个呼叫站点都打电话.

  • 我在非Web应用程序中使用RazorEngine.你提出的解决方案都没有为我工作,实际上,Html.Raw方法调用给了我以下异常:"无法编译模板.当前上下文中不存在名称'Html'".如果我有一个MvcHtmlString或一个IHtmlString它仍然html编码文本但不抛出异常. (5认同)
  • 我在Web应用程序之外使用RazorEngine,并且无法使其工作:(任何想法? (4认同)

Ode*_*ded 37

使用Html.Raw帮助器.

@Html.Raw(StaticFunctions.SpeakEvil())
Run Code Online (Sandbox Code Playgroud)