如何编写支持 collection/iteration 模板的 ASP.NET MVC Core TagHelper

How to write an ASP.NET MVC Core TagHelper that would support template for collection/iteration

我写了一堆 HTML 帮助程序,基本上涵盖了所有 HTML 元素和一些 HTML 结构,如选项卡、寻呼机、树等。现在,我想将它们转换成 TagHelpers。但是我找不到一种方法来做一件重要的事情。

为了使用我的 HTML 助手生成 table,您需要这样写:

@(Html.Table(Model.Items).Columns(columns =>
{
    columns.BoundColumn(m => m.Id).Class("id");
    columns.TemplateColumn().Class("switch")
        .Pattern((model, pattern) => pattern.Html(@<span>@(model.Title)</span>));
    columns.BoolColumn(m => m.Default);

})

它将集合作为构造函数参数,并使项目类型可用于列 属性,以便可以使用 lambda/anonymous 函数将项目属性绑定到定义的列。我有几个根据其类型呈现 text/html 的列 - BoundColumn 呈现文本,BoolColumn 将 bool 作为值并呈现 Yes/No,LinkColumn 呈现 link。还有一个采用 IHtmlString 的 TemplateColumn,这样您就可以传递要为特定列显示的任何 html 结构。

所以我希望 TagHelper 看起来像这样:

<tee-table data-source="Model.Items">
  <columns>
    <bound value="Id" />
    <bool value="Default" />
    <template value="SomeComplexType">
      <span>@value.Title</span>
    </template>
  </columns>
</tee-table>

但看起来 TagHelpers 根本不支持这个。我发现这篇文章:http://www.dotnet-programming.com/post/2015/10/31/Building-Complex-Controls-with-AspNet-MVC-6-TagHelpers.aspx 与我想做的有点接近,但还不够接近。它仍然需要在视图中进行迭代,这是我想避免的。主要是因为 Tag Helpers 应该支持 MVC 视图中的 "HTML feel"。

那么有没有一种方法可以构建一个 TagHelper 作为集合项的模板?

目前(截至 2017 年 3 月 21 日)TagHelpers 没有很好的方法来处理这个问题。但是,向 TagHelpers here.

添加模板支持存在一个持续的问题