Как написать ASP.NET MVC Core TagHelper, который будет поддерживать шаблон для сбора / итерации

Я написал несколько помощников 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, чтобы можно было привязать свойства элемента к определенным столбцам с помощью лямбда / анонимных функций. У меня есть несколько столбцов, которые отображают текст / 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, который как-то близко к тому, что я хотел бы сделать, но недостаточно близко. Он по-прежнему требует итерации в представлении, чего я хочу избежать. В основном потому, что вспомогательные функции тегов должны поддерживать «ощущение HTML» в представлениях MVC.

Итак, есть ли способ создать TagHelper, который будет работать как шаблон для элементов коллекции?


person Tacud    schedule 17.03.2017    source источник


Ответы (1)


В настоящее время (по состоянию на 21.03.2017) TagHelpers не могут решить эту проблему. Однако остается проблема с добавлением поддержки шаблонов в TagHelpers, здесь.

person N. Taylor Mullen    schedule 21.03.2017
comment
Спасибо за ссылку. Будем надеяться, что в ближайшее время будет реализована какая-то поддержка. - person Tacud; 21.03.2017