![](/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.