Имеются ли списки выбора в представленииModels?
После прочтения этого вопроса
ASP.NET MVC: вложенные ViewModels внутри друг друга, антиспартер или нет?
и комментарий Derick Bailey
Я думаю, что "подумайте о том, как будет выглядеть ваш viewmodel как xml или json" бит, вероятно, самый важный момент, здесь. Я часто использую это чтобы помочь мне понять, что должна выглядеть модель взгляда например, и помочь мне понять, какие данные являются данными "viewmodel" и "data" который идет на HTML-рендеринг вида ". помогает сохранить вещи очистите и разделите их красиво - Derick Bailey Apr 11 '11 в 15:45
Мне интересно, как бы я приблизился к созданию представления для ViewModel с элементами выбора базы данных. Я действительно борется, потому что не могу себе представить, где принадлежит SelectList
. Если я думаю с точки зрения JSON или XML, то SelectList
является частью только Просмотр. Все, что я хочу, это раскрывающийся список, предварительно заполненный списком значений для пользователя, чтобы выбрать Location
Наличие в ViewModel кажется неправильным, но когда я думаю о перемещении его в представление, я не знаю, где разместить логику вытащить из БД для заполнения списка выбора
public class SearchViewModel
{
public int? page { get; set; }
public int? size { get; set; }
//Land Related search criteria
[IgnoreDataMember]
public SelectList LocationSelection{ get; set; }
Обновление
Вот отличный вопрос и ответ, который действительно тесно связан
С# mvc 3 с использованием списка избранного с выбранным значением
Я тестировал эту реализацию, и она делает то, что я думаю, что хочу сделать. Я не собираюсь подбирать ответ, поскольку я до сих пор не полностью подтвердил это.
Ответы
Ответ 1
Я бы реорганизовал ваш viewModel в следующих строках, поскольку я не считаю, что selectlists должны принадлежать в viewmodel:
public class SearchViewModel
{
public int? page { get; set; }
public int? size { get; set; }
//Land Related search criteria
public IEnumerable<Location> LocationSelection{ get; set; }
}
и, на ваш взгляд, заполнить viewModel как таковой:
public ActionResult Search()
{
var viewModel = new SearchViewModel()
{
viewModel.LocationSelection = _repository.All<Location>()
};
// any other logic here or in service class
return View(viewModel);
}
то в вашем представлении вы должны использовать помощник html.dropdownlist для отображения ваших элементов.
работает для меня
Ответ 2
Я стараюсь избегать SelectLists, поскольку они, похоже, не вписываются в модель MVC. Вместо этого я создаю помощников для создания моих HTML-элементов из типов IEnumerable
в модели. Я думаю, что это поддерживает общее правило сохранения чистых данных в модели и логики отображения в представлении.
Но это только мое личное занятие. Я думаю, что создание SelectLists для явной цели отображения данных в представлении глупо.