#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.