Могу ли я иметь именной шаблон отображения для коллекции
У меня есть дисплей для коллекции "SomeObject"
public List<SomeObject> SomeObjects
@Html.DisplayFor(m => m.SomeObjects)
Все это отлично работает.. Тогда у меня было требование, которое означало, что мне понадобится второй другой шаблон отображения для той же коллекции..
@Html.DisplayFor(m => m.SomeObjects, "NameOfTemplate")
Когда я делаю это, я получаю сообщение ниже. Я использовал именованные шаблоны отображения раньше, но, возможно, это работает только для примитивных типов - строк и т. Д.?
'System.Collections.Generic.List1[SomeObject]'
, но этот словарь требует типового элемента типа'SomeObject'
,
Добавление кода в качестве запроса
"Тест" DisplayTemplate
@model ViewModels.SomeObject
<p class="Namme">
<span>@Model.Name</span>
</p>
SimpleViewModel
public class SomeObject
{
public string Name { get; set; }
}
Недвижимость в ParentViewModel
public List<SomeObject> SomeObjects { get; set; }
Cshtml файл..
@Html.DisplayFor(m => m.SomeObjects, "Test")
Для меня это простой вопрос, может ли именованный шаблон использоваться с коллекцией или нет? Это еще одно ограничение MVC..
Ура, Джон
2 ответа
Да, вы передаете список SomeObject
к вашему шаблону отображения, когда он ожидает:
@model ViewModels.SomeObject
Вам либо нужно изменить шаблон на что-то вроде этого и принять список в качестве модели представления:
@model IList<ViewModels.SomeObject>
@foreach (var item in Model) {
<p class="Namme">
<span>@item</span>
</p>
}
Или измените то, что вы передаете в шаблон отображения в родительском файле CSHTML, и сделайте его одним объектом SomeObject
что-то вроде этого:
public List<SomeObject> SomeObjects
@foreach (var item in Model.SomeObjects) {
Html.DisplayFor(item, "TemplateName")
}
Трудно ответить, потому что я не уверен, что вы пытаетесь достичь, и что SomeObject
есть, но это должно указать вам в правильном направлении.
Тип SomObjects
является List<SomeObjects>
поэтому шаблон представления должен иметь подходящую модель:
@model `ICollection<ViewModels.SomeObject>`
Я предпочитаю не ограничивать вид конкретным List<>
класс, а лучше использовать интерфейс.
Это также означает, что вы должны настроить свой шаблон, чтобы использовать цикл для итерации по элементам в коллекции.