Имеются ли списки выбора в представлении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 для явной цели отображения данных в представлении глупо.