255

Razor 默认对字符串进行编码。没有编码的渲染有什么特殊的语法吗?

4

8 回答 8

389

从 ASP.NET MVC 3 开始,您可以使用:

@Html.Raw(myString)
于 2010-12-21T17:53:01.103 回答
61
@(new HtmlString(myString))
于 2010-11-01T17:53:37.480 回答
35

与已经提到的 @Html.Raw(string) 方法一样,如果您输出 MvcHtmlString ,它将不会被编码。这在将您自己的扩展添加到 HtmlHelper 或从您知道可能包含 html 的视图模型返回值时很有用。

例如,如果您的视图模型是:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

对于 Core 1.0+(和 MVC 5+),使用 HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

然后

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
于 2011-06-29T08:05:06.177 回答
11

@Html.Raw()请谨慎使用,因为您可能会在编码和安全方面造成更多麻烦。我理解用例,因为我必须自己这样做,但要小心......只是避免允许所有文本通过。例如仅保留/转换特定字符序列并始终对其余字符进行编码:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

然后您就可以放心,您没有创建潜在的安全漏洞,并且任何特殊/外来字符都可以在所有浏览器中正确显示。

于 2015-04-06T21:43:45.407 回答
5

对于 ActionLink,它通常在链接文本上使用 HttpUtility.Encode。在这种情况下,您可以 HttpUtility.HtmlDecode(myString) 在使用 HtmlActionLink 解码我想要传递的字符串时使用它。例如:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)

于 2017-02-09T04:59:32.203 回答
1

您还可以使用 WriteLiteral 方法

于 2016-04-21T14:16:18.583 回答
1

HTML RAW:

@Html.Raw(yourString)
于 2016-11-03T21:05:24.257 回答
0

您只需要将 paste ®复制到您的字符串中。例如:

 @Html.ActionLink("Something ®", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })

太棒了。

于 2021-10-01T11:12:54.233 回答