asp.net Модель mvc 3 со сложным свойством и флажками

#asp.net-mvc

#asp.net-mvc

Вопрос:

У меня есть типизированное представление как элемент (один класс, который я создал) с формой внутри для добавления элементов в мою базу данных. Этот класс элементов имеет одно свойство, называемое Categories, которое представляет собой список (Категория имеет 2 свойства ID и Name)

Я использую редактор, на мой взгляд:

 <div>
     @(Html.EditorFor(e => e.Categories, "Categories"))    
</div>
  

Я создал EditorTemplatefor под названием «Categories.cshtml» для отображения всех доступных категорий:

 @{
    Layout = null;
}
@model List<Category>

@{
    foreach (Category category in ((BaseController)this.ViewContext.Controller).BaseStateManager.AvailableCategories)
    {
        @Html.Label("test", category.Name)
        <input type="checkbox" name="Categories" value="@(category.ID)" />
    }    
}
  

Флажки хорошо отрисованы (по одному для каждой доступной категории в кэше), но после нажатия на некоторые и отправки формы я получаю свой экземпляр Item, но с пустыми категориями свойств.

Что мне нужно сделать, чтобы мои категории списка были полностью созданы после отправки формы?

Ответ №1:

Не зацикливайте это. Позвольте фреймворку сгенерировать код для вас (затем он будет знать, как собрать его обратно и привязать к вашему контроллеру).

Просто передайте список в шаблон редактора, а mvc сделает все остальное. Проверьте мой пост в блоге о чем-то подобном.

Комментарии:

1. Спасибо, Шон, действительно полезно. У меня есть последнее сомнение, я должен напечатать в моем случае все кэшированные категории. Для редактирования элемента мне нужно отобразить все категории из кэша, но проверить те, которые есть у моего элемента. Как вы это решаете? Спасибо. С уважением.

2. Создайте модель представления, которая будет точно отражать то, что происходит в представлении. Таким образом, логическое свойство для флажка уже должно быть обработано перед передачей модели в редактор.

Ответ №2:

Попробуйте использовать цикл на основе индекса. Это гарантирует, что MVC отобразит атрибуты элемента таким образом, что позволит связующему модели по умолчанию создать экземпляр модели при обратной публикации. Кроме того, используйте Html-помощник и для флажка:

 var categories = ((BaseController)this.ViewContext.Controller).BaseStateManager.AvailableCategories;

for (var index = 0; index < categories.Count; index   )
{
    @Html.Label("test", categories[index].Name)
    @Html.Checkbox("ID", categories[index].ID)
}
  

Комментарии:

1. Привет, Attadeini, спасибо за ответ. Элементы визуализируются, но при обратной передаче я получаю свою модель. Категории =null. Вы знаете почему? Спасибо.Хосе