如何编写支持收集/迭代模板的ASP.NET MVC Core TagHelper

时间:2017-03-17 12:05:43

标签: c# asp.net-core asp.net-core-mvc asp.net-core-tag-helpers

我编写了一堆HTML帮助程序,基本上涵盖了所有HTML元素和一些HTML结构,如标签,寻呼机,树等。现在,我想将它们转换为TagHelpers。但我找不到办法如何做一件必不可少的事情。

为了使用我的HTML帮助器生成表,您需要编写如下内容:

@(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);

})

它将一个集合作为构造函数参数,并使项类型可用于Columns属性,以便可以使用lambda / anonymous函数将项属性绑定到已定义的列。我有几个列根据其类型呈现text / html - BoundColumn呈现文本,BoolColumn将bool作为值并呈现是/否,LinkColumn呈现链接。还有一个采用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感觉”。

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

1 个答案:

答案 0 :(得分:0)

目前(截至2017年3月21日)TagHelpers没有很好的方法来解决这个问题。但是,有一个问题是为TagHelpers添加模板支持here