[英]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.