代码之家  ›  专栏  ›  技术社区  ›  Razvan Dumitru

ASP.NET核心到HTML字符串

  •  0
  • Razvan Dumitru  · 技术社区  · 8 年前

    我有以下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核心之前,您将以以下方式处理此请求:

      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 动态链接库。

    我们如何在.NET核心中处理这个问题?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Razvan Dumitru    8 年前

    我最终为创建了一个扩展方法 IHtmlContent 以下内容:

     public static class HtmlContentExtensions
     {
         public static string ToHtmlString(this IHtmlContent htmlContent)
         {
             using (var writer = new StringWriter())
             {
                 htmlContent.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
                 return writer.ToString();
             }
         }
      }
    

    我在Kendo用户界面网格中使用它的方式如下:

    columns.Bound(c => c.Name).ClientTemplate(Html.ActionLink("#=Name#", "Details", new { id = "#=Id#" }).ToHtmlString());
    
    推荐文章