在Razor视图中发出未编码的字符串

hem*_*mme 78 asp.net html-encode razor

正如ScottGu在他的博客文章中所说的那样«默认情况下,使用@ block发出的内容会自动进行HTML编码,以更好地防范XSS攻击情形» 我的问题是:如何输出非HTML编码的字符串?

为简单起见,请坚持这个简单的案例:

@{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}
Run Code Online (Sandbox Code Playgroud)

mig*_*elv 109

这是我最喜欢的方法:

@Html.Raw("<p>my paragraph text</p>")
Run Code Online (Sandbox Code Playgroud)

来源是Phil Haack的Razor语法参考:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx


aol*_*lde 17

您可以创建一个不会获得HTML编码的MvcHtmlString的新实例.

@{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}
Run Code Online (Sandbox Code Playgroud)

希望Razor的未来有一个更简单的方法.

如果您没有使用MVC,可以试试这个:

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上你也可以在MVC 3中使用`new HtmlString()`,因为那个类型是.NET 4. (2认同)

Eri*_*ter 6

新的HtmlString绝对是答案.

我们研究了其他一些剃刀语法的变化,但最终它们都没有真正比新的HtmlString更短.

但是,我们可以将其包装成一个帮手.也许...

@Html.Literal("<p>something</p>")
Run Code Online (Sandbox Code Playgroud)

要么

@"<p>something</p>".AsHtml()
Run Code Online (Sandbox Code Playgroud)

  • 我们希望避免在不涵盖主要用户案例的情况下添加语法结构.大多数情况下,你将使用辅助方法来构建字符串,IHtmlString在那里工作得很好.对于需要输出没有帮助器的文字字符串的奇怪情况,我们可以为您提供一种方法:@Literal(foo)或类似方法. (2认同)