Создайте EditorTemplate для ViewModel вместо CheckBoxList

Вместо использования вспомогательного элемента управления CheckBoxList я хочу использовать шаблоны редактора инфраструктуры mvc:

В Shared \ EditorTemplate у меня есть TemplateViewModel.cshtml

@model ITMS.ViewModels.TemplateViewModel

<p class="checkbox">
@Html.CheckBoxFor(x => x.IsChecked)
@Html.HiddenFor(x => x.Id) 
@Html.LabelFor(x => x.Name)
</p>

Поскольку шаблон должен иметь то же имя, что и модель представления ... вот и все:

public class TemplateViewModel
{  
        public bool IsChecked { get; set; }
        public int Id { get; set; }       
        public string Name { get; set; }   
}

В Home \ Delete.cshtml у меня есть:

@model IEnumerable<ITMS.ViewModels.TemplateViewModel>

@foreach (var item in Model)
{
    @Html.EditorFor(m => item)   
}

Результат в Delete.cshtml - полный беспорядок.

Я просто хочу, чтобы мой чек-статус и имя были видны, а идентификатор где-то спрятан.

Как мне исправить мой TemplateViewModel.cshtml / Delete.cshtml?


person Pascal    schedule 07.05.2012    source источник
comment
это полный бардак бессмысленно. Подробно опишите вашу проблему.   -  person Erik Funkenbusch    schedule 07.05.2012


Ответы (1)


В вашем Delete.cshtml избавьтесь от цикла foreach и просто:

@model IEnumerable<ITMS.ViewModels.TemplateViewModel>
@Html.EditorForModel()

Шаблон редактора будет автоматически отображаться для каждого элемента вашей модели (который в данном случае является коллекцией), и вам не нужно писать какие-либо циклы.

Также убедитесь, что ваш шаблон редактора находится в ~/Views/Shared/EditorTemplates/TemplateViewModel.cshtml. В своем вопросе вы написали Shared\EditorTemplate, что неверно (вы забыли s в конце). Шаблоны работают по правилам, которым вы должны следовать.

person Darin Dimitrov    schedule 07.05.2012
comment
спасибо Дарин работает, но я просто подумал, почему я должен выбрать этот подход с EditorTemplates, а не просто аннотировать мою модель представления с помощью DataTypes? Или другой подобный подход. Почему EditorTemplate? - person Pascal; 07.05.2012
comment
@Pascal, я понимаю, что вы имеете в виду, аннотируя модель представления с помощью DataTypes, и какое это имеет отношение к написанному вами настраиваемому шаблону редактора. Основное преимущество шаблонов редактора заключается в том, что они упрощают код вашего представления и генерируют собственные имена для ваших полей ввода, чтобы связующее устройство модели по умолчанию могло обратно десериализовать значения. - person Darin Dimitrov; 08.05.2012