ASP.NET MVC3, зачем нужен строго типизированный View? - PullRequest
1 голос
/ 13 февраля 2012

Я прочитал блог Скотта Гатри - ASP.NET MVC 3: новое ключевое слово @model в Razor

Одна вещь, которую я не понимаю, это то, что страница будет связывать значение по-разному, но почему мы должны применять привязку вида из Model?

Например, пользовательская панель управления веб-сайта форума, может содержать информацию о пользователе, историю публикаций, настройки пользователя и т. Д.

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

Однако одно представление может ссылаться только на одну директиву @model.

На самом деле, я могу добавить, какие свойства к модели мне нужноиспользовать.Так в чем же преимущество того, чтобы представление стало строго типизированным?

Ответы [ 4 ]

4 голосов
/ 13 февраля 2012

Однако одно представление может ссылаться только на одну директиву @model.

Да, и это должна быть ваша модель представления.Модель представления - это класс, который вы специально разрабатываете для удовлетворения требований данного представления.И вы делаете это для каждого представления

С точки зрения модели данных источник привязки может быть получен из другой таблицы: пользователи, публикации, настройки_пользователей и т. Д.

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

Вы никогда не должны передавать свои доменные моделина ваш взгляд.Поскольку представления обычно являются проекцией одной или нескольких моделей предметной области =>, следовательно, необходимо определить модель представления.

3 голосов
/ 13 февраля 2012

1) Вы можете использовать автоматические строительные леса
2) Поддержка IntelliSense
3) Проверка типа времени компиляции

2 голосов
/ 13 февраля 2012

Ваша модель представления должна быть отделена от ваших бизнес-моделей.

Одна страница будет иметь один вид модель.

Например:

public class UserPost
{
    public string UserName { get; set; }
    public string Subject { get; set; }
    public IEnumerable<Message> Messages { get; set; }
}

Ваше свойство UserName будет исходить из таблицы Users и поля UserName в ней. Ваш субъект может приходить из таблицы Subjects, а сообщения из другого.

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

1 голос
/ 13 февраля 2012

Поэтому рекомендуется создавать ViewModel для View.Эта ViewModel содержит все свойства, необходимые для представления (пользователи, сообщения, настройки и т. Д.).

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

Преимущество заключается в том, что при строгой типизации меньше вероятность ошибок во время выполнения.Кроме того, когда что-то меняется (например, столбцы базы данных), эти ошибки будут обнаружены IDE напрямую.

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