Использование ViewModel для отображения всех элементов в MVC

#asp.net-mvc #model-view-controller #linq-to-sql

#asp.net-mvc #модель-представление-контроллер #linq-to-sql

Вопрос:

У меня есть представление, которое отображает список объектов (L2Sql), у меня уже есть ViewModel, который содержит некоторые свойства для редактирования / просмотра. Рекомендуется ли передавать IEnumerable в представление, чтобы перечислить все объекты, или было бы разумно передать список ViewModel?

HTMS

ОБНОВЛЕНИЕ: на основе resopnses вот моя ViewModel:

 public class CategoryViewModel
   {
      #region Properties

      public IEnumerable<CategoryViewModel> Categories { get; set; }
      public int Id { get; set; }
      public string Name { get; set; }
      public int Order { get; set; }
      public int? ParentCategoryId { get; set; }

      #endregion
   }
  

Свойство Categories используется представлениями для выпадающего списка, будет ли это приемлемо?

Ответ №1:

IEnumerable<ViewModel> рекомендуемый способ. Я видел, как многие люди определяли свои модели представления следующим образом:

 public class MyViewModel
{
    public SomeDomainEntity1 Entity1 { get; set; }
    public SomeDomainEntity2 Entity2 { get; set; }
    public IEnumerable<SomeDomainEntity3> Entities3 { get; set; }
}    
  

На самом деле это неправильное использование моделей представления. Для меня это вообще не модели просмотра. Модель представления не должна ссылаться на какую-либо модель предметной области.

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

1. Я думаю, что nerddinner ( nerddinnerbook.s3.amazonaws.com/Part6.htm ) учебные пособия ScottGu и co делают это таким образом.

2. Прежде чем я отмечу как ответ, не могли бы вы проверить мое обновление? Я просто хочу сделать это правильно.

3. @raklos, отсюда и причина моего первоначального сообщения, хотя я вижу обе стороны истории. Если вы начнете затем детализировать в своем представлении закрытый DataContext, у вас возникнут проблемы, следовательно, необходимо оторваться от уровня сохраняемости.

4. @Mantorok, ваш обновленный ответ показывает совершенно правильную модель представления. raklos, nerddinner также делают такие вещи, как внедрение зависимостей poor man , поэтому, хотя это хорошее начало для изучения MVC, если вы хотите следовать рекомендациям, это не то приложение, у которого я бы рекомендовал учиться.

5. @DarinDimitrov, конечно, из интереса, можете ли вы порекомендовать, где найти лучшие практики .net MVC?

Ответ №2:

Если вам нужна только информация из перечисляемого, нет ничего плохого в передаче ее непосредственно в представление. Если вам нужна дополнительная информация (например: текущий пользователь или любая другая вещь), вы должны поместить свой enumerable как свойство в вашу ViewModel.