ASP.NET Core ToHtmlString
Posted
技术标签:
【中文标题】ASP.NET Core ToHtmlString【英文标题】: 【发布时间】:2018-11-25 10:26:10 【问题描述】:我有以下 Kendo UI 网格,我需要为详细信息页面呈现操作链接:
@(html.Kendo().Grid<Model>()
.Name("grid")
.Columns(columns =>
columns.Bound(c => c.Id).Hidden(true);
@* Invalid line of code as ClientTemplate is waiting for a string *@
columns.Bound(c => c.Name).ClientTemplate(Html.ActionLink("#=Name#", "Details", new id = "#=Id#" ));
@* Invalid line of code as ClientTemplate is waiting for a string *@
columns.Bound(c => c.Type).Width(100);
columns.Bound(c => c.Subdomain).Width(150);
columns.Bound(c => c.Description);
columns.Bound(c => c.Status).Width(100);
columns.Select().Width(50);
)
.AutoBind(false)
.Scrollable()
.Pageable(pageable => pageable
.Refresh(false)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("Read", "Data"))
.PageSize(5)).Deferred())
ClientTemplate
方法需要一个 html 字符串。
columns.Bound(c => c.Name).ClientTemplate(string template)
在 .NET Core 之前,您将按以下方式处理此请求:
columns.Bound(c => c.Name).ClientTemplate(Html.ActionLink("#=Name#", "Details", new id = "#=Id#" ).ToHtmlString());
很遗憾,.ToHtmlString()
(https://msdn.microsoft.com/en-us/library/system.web.htmlstring.tohtmlstring(v=vs.110).aspx) 是 System.Web
dll 的一部分。
我们如何在 .NET Core 中处理这个问题?
【问题讨论】:
你试过 System.Net.WebUtility.HtmlEncode(string) 和 System.Net.WebUtility.HtmlDecode(string)。.ActionLink()
返回一个IHtmlContent
。我需要一种将 IHtmlContent
转换为 html 字符串的方法。
【参考方案1】:
我最终为IHtmlContent
创建了一个扩展方法:
public static class HtmlContentExtensions
public static string ToHtmlString(this IHtmlContent htmlContent)
if (htmlContent is HtmlString htmlString)
return htmlString.Value;
using (var writer = new StringWriter())
htmlContent.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
return writer.ToString();
我在我的剑道 UI 网格中以下列方式使用它:
columns.Bound(c => c.Name).ClientTemplate(Html.ActionLink("#=Name#", "Details", new id = "#=Id#" ).ToHtmlString());
【讨论】:
如果 IHtmlContent 是 HtmlString 的实例,则只需获取 value 属性即可。所以在我的这个扩展方法的版本中,我在使用之前添加了这个: if (htmlContent is HtmlString htmlString) return htmlString.Value;以上是关于ASP.NET Core ToHtmlString的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net core (Full .Net framework) vs Asp.Net core (.Net Core) 性能
Asp.NET Core进阶 第四篇 Asp.Net Core Blazor框架
.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介
深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的