正如 ScottGu 在他的博客文章中所说的“默认情况下,使用 @ 块发出的内容会自动进行 HTML 编码,以更好地防止 XSS 攻击场景”。我的问题是:如何输出非 HTML 编码的字符串?
为了简单起见,请坚持这个简单的案例:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
正如 ScottGu 在他的博客文章中所说的“默认情况下,使用 @ 块发出的内容会自动进行 HTML 编码,以更好地防止 XSS 攻击场景”。我的问题是:如何输出非 HTML 编码的字符串?
为了简单起见,请坚持这个简单的案例:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
这是我最喜欢的方法:
@Html.Raw("<p>my paragraph text</p>")
来源是 Phil Haack 的 Razor 语法参考:http ://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
您可以创建一个不会进行 HTML 编码的 MvcHtmlString 的新实例。
@{
var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}
希望 Razor 的未来会有更简单的方法。
如果你不使用 MVC,你可以试试这个:
@{
var html = new HtmlString("<a href='#'>Click me</a>")
}
new HtmlString 绝对是答案。
我们研究了其他一些 razor 语法更改,但最终没有一个比 new HtmlString 更短。
然而,我们可以把它包装成一个助手。可能...
@Html.Literal("<p>something</p>")
或者
@"<p>something</p>".AsHtml()
在将我们的项目转换到新的 Razor 视图引擎时,我也遇到了这个问题。我采用的方法略有不同,因为我们必须从 C# 生成 JSON 数据,并希望在页面加载时输出它。
我最终所做的是在 cshtml 文件中实现一个与 View 平行的 RawView。本质上,要获得原始字符串,
@(new HtmlString(View.Foo))
// became
@RawView.Foo
这需要对项目布局进行一些更改,所以我只是在这里写了一篇关于它的博客文章。简而言之,这需要 MVC 的 DynamicViewDataDictionary 的重复实现和包含 RawView 的新 WebViewPage。我还继续在 RawView 上实现了索引运算符以允许
@RawView["Foo"]
万一有人需要使用键列表遍历数据。
阅读 anurse 的评论,如果我将其命名为 Literal 而不是 RawView,可能会更好。
我在 Mono 下使用 ASP.NET MVC 和 Razor。
由于某些原因,我无法从 System.Web.Mvc 的 System.Web.WebPages 获得 HtmlHelper。
但是在将模型的属性声明为RazorEngine.Text.RawString
. 现在它按预期输出。
例子
@{
var txt = new RawString("some text with \"quotes\"");
var txt2 = "some text with \"quotes\"";
}
<div>Here is unencoded text: @txt</div>
<div>Here is encoded text: @txt2</div>
输出:
<div>Here is unencoded text: some text with "quotes"</div>
<div>Here is encoded text: some text with "quotes"</div>