C# 使用Microsoft.AspNetCore.Html.HtmlString

C# 使用Microsoft.AspNetCore.Html.HtmlString,c#,asp.net-mvc,razor,asp.net-core-mvc,asp.net-core-2.0,C#,Asp.net Mvc,Razor,Asp.net Core Mvc,Asp.net Core 2.0,它是运行在Visual Studio 2017上的.Net Core 2.0应用程序 我想显示视图中返回的HTML字符串 我已经将Microsoft.AspNetCore.Html.Abstractions添加到我的应用程序中,我想在Razor视图中显示一个Html sting,这就是我的CSHTML的外观 @model EDMTLC.Models.QuickResultViewModel @using Microsoft.AspNetCore.Html; <div>@Html.Di

它是运行在Visual Studio 2017上的.Net Core 2.0应用程序 我想显示视图中返回的HTML字符串

我已经将Microsoft.AspNetCore.Html.Abstractions添加到我的应用程序中,我想在Razor视图中显示一个Html sting,这就是我的CSHTML的外观

@model EDMTLC.Models.QuickResultViewModel
@using Microsoft.AspNetCore.Html;
<div>@Html.Display(Model.ResultHTML) </div>
<div>TEST</div>
<pre>
    <code>@Html.Raw(Model.ReportHTML)</code>
</pre>
@model-EDMTLC.Models.QuickResultViewModel
@使用Microsoft.AspNetCore.Html;
@Display(Model.ResultHTML)
试验
我不认为@Html.Display是我应该做的。在以前的.Net版本中,我经常

<div>
    <text> @MvcHtmlString.Create(Model.ReportHTML)</text>
 </div>

@MvcHtmlString.Create(Model.ReportHTML)
但这将不再适用于Core2.0

有人能举个例子吗?我找到了线,但没用


谢谢

您试过
@Html.Raw()
吗?它应该将值显示为原始字符串,而不进行编码

这应该适用于
Asp.Net核心Mvc 2.0
和以前的版本,而无需安装额外的NuGet软件包

笔记
  • 为了使用
    @Html.Display()
    ,如果要将字符串表达式传递给参数,则该参数必须与视图模型中定义的属性之一匹配

    // This works but it encodes your HTML
    @Html.DisplayFor(x => x.ResultHTML)
    
  • 或者您可以使用
    @Html.DisplayFor()
    并传递lamba表达式,以避免视图中出现神奇的字符串

    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 />");
    }
    

  • 一般规则是为了安全起见,最好避免使用
    Html.Raw
    Microsoft.AspNetCore.Html.HtmlContentBuilder
    像这样

    Microsoft.AspNetCore.Html.HtmlContentBuilder数据库列表=新的Microsoft.AspNetCore.Html.HtmlContentBuilder();
    AppendHtml(“此服务器上的数据库列表为:“+”
    ); foreach(dbList中的var db){ DatabaseList.AppendHtml(db.ToString()+“
    ”; }
    更优雅的解决方案是构建扩展方法:

    @using MyProject.Extensions
    
    现在,在您的视图中,您将能够执行以下操作:

    @Model.ReportHTML.ToHtmlString()
    
    我建议在现实世界的应用程序中进行额外的消毒,但这应该能回答OP的问题

    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);
        }
    }
    
    @using MyProject.Extensions
    
    <div>@Model.ReportHTML.ToHtmlString()</div>