我编写了一堆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?