MVC 2 viewmodels вопрос - PullRequest
       2

MVC 2 viewmodels вопрос

1 голос
/ 01 августа 2010

Просто работаю над учебником на asp.net/mvc для приложения музыкального магазина.

Ссылка: http://www.asp.net/mvc/tutorials/mvc-music-store-part-3

В контроллере они передают список жанров в модель представления, я только начинающий, но я чувствую, что задачей модели представления является представление данных в том формате, который требуется для представления.

код учебника делает это ...

public ActionResult Index() 
{     
    // Retrieve list of Genres from database     
    var genres = from genre in storeDB.Genres select genre.Name;       

    // Set up our ViewModel     
    var viewModel = new StoreIndexViewModel()
    {         
        Genres = genres.ToList(),         
        NumberOfGenres = genres.Count()
    }; 

    // Return the view     
    return View(viewModel);
}

Что я хочу сделать, это передать жанры в viewModel и внутри viewModel создать список, а также установить свойство NumberOfGenres. Как это закодировано, контроллер должен знать больше о представлении, чем нужно.

может кто-нибудь показать мне, как будет выглядеть мой класс viewModel, чтобы использовать методы ToList () и Count () для свойства genres внутри моей viewModel?

Ответы [ 2 ]

1 голос
/ 01 августа 2010

Я могу ошибаться, но вы, похоже, не понимаете, как устроена viewModel.Код делает именно то, что вы описали.

Метод ToList () возвращает результат запроса, который был записан выше, в виде списка.Помните, что он не выполняется до вызова ToList ().

После получения результатов из базы данных они присваиваются свойствам в классе StoreIndexViewModel.

Если мы напишем код другим способом, этобыть проще для понимания

public ActionResult Index() 
{     
    // Retrieve list of Genres from database     
    var genres = from genre in storeDB.Genres select genre.Name;
    var genresList=genres.ToList();       

    // Set up our ViewModel     
    StoreIndexViewModel viewModel = new StoreIndexViewModel()
    viewModel.Genres=genresList;
    viewModel.NumberOfGenres=genresList.Count;

    // Return the view     
    return View(viewModel);
}

Обновление:

Вы не создаете список в ViewModel.Вы получаете их из базы данных.Если вы посмотрите на выражение LINQ, оно получит только названия жанров.Позже эти результаты присваиваются свойству класса.

ViewModels используются для предоставления дополнительной информации для View.Здесь он используется только для показа других жанров.Он использует только их имена, чтобы пользователи могли просматривать их.Я не проверял учебник, но для создания, удаления или редактирования жанров нужны свои функции.

1 голос
/ 01 августа 2010

Я собираюсь не согласиться с вами. Контроллер ничего не знает о представлении, только модель. Модель представления, IMO, должна быть простым контейнером, как и в учебнике. Задача контроллера - заполнить контейнер данными и передать их в представление.

Остается открытым вопрос, является ли модель представления настолько простой, насколько она должна быть, т. Е. Вы можете легко определить количество жанров из их списка, поэтому в действительности нет необходимости иметь ее как отдельное свойство. Если вы хотите просто сохранить список в модели, все, что вам нужно сделать, это вызвать метод Count () в представлении вместо того, чтобы делать это в контроллере.

Не зная учебника, я не уверен, что они сделали это таким образом в ожидании добавления подкачки в модель. Если вы хотите поддерживать подкачку в модели, то вам нужно общее количество как отдельное свойство, поскольку вы будете передавать только часть коллекции в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...