ASP.NET MVC Razor无需编码即可呈现

时间:2010-11-01 17:50:14

标签: c# .net asp.net asp.net-mvc razor

Razor默认编码字符串。是否有任何特殊的语法无需编码即可进行渲染?

7 个答案:

答案 0 :(得分:358)

自ASP.NET MVC 3起,您可以使用:

@Html.Raw(myString)

答案 1 :(得分:53)

@(new HtmlString(myString))

答案 2 :(得分:30)

除了已经提到的@ Html.Raw(字符串)方法之外,如果输出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>

答案 3 :(得分:10)

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

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

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:1)

您也可以使用WriteLiteral方法

答案 6 :(得分:0)

HTML RAW:

@Html.Raw(yourString)