它是一个运行在VisualStudio2017上的.Net.Net Core2.0应用程序,我想显示一个在视图上返回的HTML。
我已经将Microsoft.AspNetCore.Html.Abstractions 努基特添加到我的应用程序中,我希望在Razor视图上显示一个HTML,这就是我的CSHTML的样子。
@model EDMTLC.Models.QuickResultViewModel
@using Microsoft.AspNetCore.Html;
<div>@Html.Display(Model.ResultHTML) </div>
<div>TEST</div>
我不认为@Html.Display是我应该做的。在以前的版本.Net中,我经常
<div>
<text> @MvcHtmlString.Create(Model.ReportHTML)</text>
</div>
但是这将不再适用于Core2.0
有人能帮忙举个例子吗?我找到了这线程,但没有帮助!
谢谢
发布于 2020-03-08 17:11:21
一个更优雅的解决方案是构建一个扩展方法:
using Microsoft.AspNetCore.Html;
public static class StringExtensions
{
/// <summary>
/// Convert a standard string into a htmlstring for rendering in a view
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static HtmlString ToHtmlString(this string value)
{
return new HtmlString(value);
}
}
在您的_ViewImports文件中,如果需要,请包括名称空间:
@using MyProject.Extensions
现在,在您的观点中,您将能够做到:
<div>@Model.ReportHTML.ToHtmlString()</div>
我建议在现实世界的应用程序中做更多的消毒,但这应该会回答OP的问题。
发布于 2018-03-29 23:51:49
你试过@Html.Raw()
了吗?它应该将值显示为原始字符串,而不进行编码。
<pre>
<code>@Html.Raw(Model.ReportHTML)</code>
</pre>
这应该适用于Asp.Net Core Mvc 2.0
和早期版本,而不需要安装额外的NuGet包。
备注
@Html.Display()
,如果要向参数传递字符串表达式,则该参数必须与视图模型中定义的属性之一相匹配。
//这不工作@Html.Display(Model.ResultHTML) //,但它编码了HTML @Html.Display("ResultHtml")@Html.DisplayFor()
并传递一个lamba表达式以避免视图中的神奇字符串
//这是可行的,但它编码了HTML @Html.DisplayFor(x => x.ResultHTML)发布于 2020-02-10 12:43:37
一般规则是为了安全等原因而避免使用Html.Raw
,最好像这样使用Microsoft.AspNetCore.Html.HtmlContentBuilder
Microsoft.AspNetCore.Html.HtmlContentBuilder DatabaseList = new Microsoft.AspNetCore.Html.HtmlContentBuilder();
DatabaseList.AppendHtml("The list of databases on this server is: " + "<br />");
foreach (var db in dbList) {
DatabaseList.AppendHtml(db.ToString() + "<br />");
}
https://stackoverflow.com/questions/49566489
复制相似问题