视图部分利用@符号获取数据,运行时正常,在查看最终HTML内容是为被编码过的内容。
取数:
<select name="place" asp-for="@Model.Item2.SelectPlaceName" asp-items="@Model.Item2.Places" class="form-control valid" />
html最终源码:
在 asp.net core 中,基于防范 xss 攻击的安全考虑,默认将所有非基本字符(U+0000..U+007F)的字符进行编码。因此基本除了英文字母那一部分,其他的全被编码了。
这个控制为 HtmlEncoder 中的 UnicodeRange 被设置成 UnicodeRanges.BasicLatin。
解决方案
配置将 UnicodeRange 范围放宽。我们可以通过将编码器替换为支持中文的 Unicode 编码器来解决它。在 ASP.NET Core 中,各种服务是通过依赖注入来提供服务的。所以,我们可以通过调整容器中注册的服务来解决这个问题。
program.cs中修改
services.Configure<WebEncoderOptions>(options => options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs));