簡體   English   中英

ASP.NET MVC Razor 無編碼渲染

[英]ASP.NET MVC Razor render without encoding

Razor 默認編碼字符串。 沒有編碼的渲染有什么特殊的語法嗎?

從ASP.NET MVC 3開始,您可以使用:

@Html.Raw(myString)
@(new HtmlString(myString))

就像已經提到的@ 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>

請謹慎使用@Html.Raw() ,因為這可能會給編碼和安全性帶來更多麻煩。 我了解用例,因為我必須自己做,但是要小心……只是避免讓所有文本通過。 例如,僅保留/轉換特定的字符序列,並始終對其余字符進行編碼:

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

然后,您不必擔心尚未創建潛在的安全漏洞,並且所有特殊/外國字符都將在所有瀏覽器中正確顯示。

對於ActionLink,通常在鏈接文本上使用HttpUtility.Encode。 在那種情況下,您可以使用HttpUtility.HtmlDecode(myString)它在使用HtmlActionLink解碼要傳遞的字符串時對我有用。 例如:

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

您還可以使用WriteLiteral方法

HTML RAW:

@Html.Raw(yourString)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM