在VS2017的.NET Core 2.0项目中如何在Razor视图显示HTML字符串?
解决Razor视图中显示HTML字符串的问题
你说得对,@Html.Display()确实不是正确的方式——这个方法默认会对输出内容进行HTML编码,导致你的HTML标签被当成纯文本显示,而不是渲染成网页元素。结合你的.NET Core 2.0环境,给你两种靠谱的解决方案:
方案一:在ViewModel中使用IHtmlString类型(推荐)
既然你已经引用了Microsoft.AspNetCore.Html.Abstractions包,我们可以直接用包里的IHtmlString(或者它的实现类HtmlString)标记HTML属性,让Razor知道这是安全的HTML内容,不需要编码。
- 修改
QuickResultViewModel,把ResultHTML的类型改成IHtmlString:
using Microsoft.AspNetCore.Html; namespace EDMTLC.Models { public class QuickResultViewModel { public IHtmlString ResultHTML { get; set; } } }
- 在控制器中,将生成的HTML字符串转换成
HtmlString实例:
// 假设yourHtmlContent是你要返回的HTML内容 var viewModel = new QuickResultViewModel { ResultHTML = new HtmlString(yourHtmlContent) }; return View(viewModel);
- 视图里直接输出属性即可,Razor会自动渲染HTML:
@model EDMTLC.Models.QuickResultViewModel <div>@Model.ResultHTML</div> <div>TEST</div>
方案二:在视图中使用@Html.Raw()(临时场景可用)
如果不想修改ViewModel的类型,也可以在视图里用Html.Raw()方法强制输出未编码的HTML。不过要注意:这个方法会跳过编码,一定要确保HTML内容是安全的(比如不是用户输入的内容),否则会有XSS攻击风险。
修改后的视图代码:
@model EDMTLC.Models.QuickResultViewModel <div>@Html.Raw(Model.ResultHTML)</div> <div>TEST</div>
两种方法里,方案一更符合ASP.NET Core的设计规范,它明确区分了普通文本和HTML内容,也能让其他开发者一眼看出这个属性的用途。
内容的提问来源于stack exchange,提问作者Srééjîth Náîr
相关产品推荐
相关产品推荐

