![](/img/trans.png)
[英]How to render ModelMetadata object using Html.Displar in Razor-engine in ASP.NET MVC app?
[英]How to stop ASP.NET Core 2 MVC's razor engine using HTML unicode escaping?
通常創建一個默認的ASP.NET Core 2 MVC項目,然后稍微修改一下這個動作:
public IActionResult About()
{
ViewData["Message"] = "This is Chinese[中文]";
return View();
}
這是視圖(About.cshtml):
<h3>@ViewData["Message"]</h3>
<h3>這也是中文</h3>
這是瀏覽器中的輸出結果:
<h3>This is Chinese[中文]</h3>
<h3>這也是中文</h3>
我發現'@'符號呈現的中文文本是html unicode轉義。 問題是如何阻止'@'符號來逃避我的文字?
根據這篇文章 :
默認情況下,編碼器使用限制為Basic Latin Unicode范圍的安全列表,並將該范圍之外的所有字符編碼為其等效的字符代碼。 此行為也會影響Razor TagHelper和HtmlHelper呈現,因為它將使用編碼器輸出您的字符串。
本文還提供了一種自定義默認html編碼器的正確方法。 將以下注冊添加到Startup.ConfigureServices
方法:
services.AddSingleton<HtmlEncoder>(
HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin,
UnicodeRanges.CjkUnifiedIdeographs }));
這是調整后的結果html代碼:
<h3>This is Chinese[中文]</h3>
<h3>這也是中文</h3>
問題 :
由於HTML正在被ESCAPED,DotNet Core Controller正在返回未正確呈現的HTML。
答案 :
@Html.Raw(ViewData["Message"])
合理的
當Razor調用創建HTML的自定義函數時,返回的HTML通常會自動轉義。 這是設計的,並且對於許多框架(如Rails)來說並不罕見。 無論如何,自定義函數返回的OUTPUT必須呈現為RAW。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.