【发布时间】:2017-03-17 12:05:43
【问题描述】:
我已经编写了一堆 HTML Helper,它们基本上涵盖了所有 HTML 元素和一些 HTML 结构,如选项卡、分页器、树等。现在,我想将它们转换为 TagHelper。但是我找不到一种方法来做一件重要的事情。
为了使用我的 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/匿名函数将项目属性绑定到定义的列。我有几个列根据其类型呈现文本/html - BoundColumn 呈现文本,BoolColumn 将 bool 作为值并呈现是/否,LinkColumn 呈现链接。还有一个 TemplateColumn 接受 IHtmlString,这样你就可以传递任何你想为特定列显示的 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 这与我想做的事情有点接近,但还不够接近。它仍然需要在视图中进行迭代,这是我想要避免的。主要是因为标签助手应该支持 MVC 视图中的“HTML 感觉”。
那么有没有办法构建一个可以作为集合项目模板的 TagHelper?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc asp.net-core-tag-helpers