ASP.NET MVC 2: любой способ передать два объекта в шаблон? - PullRequest
2 голосов
/ 24 августа 2010

«Поиск» в этом примере - это IList<string> сокращений состояний.Как правило, ваши POCO модели домена не включают эти параметры.ViewModels обычно берет на себя эту ответственность, ссылаясь как на исходную модель домена, так и на объект Lookup, но что происходит, когда модели домена вложены и вы используете шаблоны MVC (которые не будут иметь доступа к корневым свойствам исходной модели?

Есть ли способ включить Lookups в один объект, а Model - в другой объект для шаблона? Разрешено ли на лету собирать ViewModel, специфичную для этого шаблона, в представлении (которое должно включатьлюбые вложенные данные оттуда)? Я думаю, что статические методы для снятия значений Lookup это плохо.

Любые идеи?

Примечания (насколько мне известно):

ДоменМодель POCO из репозитория не изменяется по структуре. Если вам нужна одна Модель, чтобы иметь, например, объект Customer и параметры DDL для США, у вас обычно есть ViewModel, который ссылается на объект Customer и списки Customer Lookup.

Однако, когда у вас есть модель вложенного домена(объединенный корень), вложенные объекты не имеют места для размещения списков поиска, а шаблоны MVC не могут получить доступ к модели представления корневого уровня (их модель представления является частичной моделью).

Редактировать:

Есть ли способ поместить списки DDL в корневой уровень ViewModel, а затем, когда вы доберетесь до объекта Customer, создайте новый ViewModel, который ссылается на списки DDL корневого уровня и текущий объект Customerотправить по шаблону?Это позволит исключить дублирование данных в модели, а также использовать одну модель для всех видов.Единственным плохим будет Controller, как код сборки данных в вашем представлении (что так же плохо).

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Пара предложений.Во-первых, используйте отдельные модели представлений для ваших представлений - не используйте модели вашего домена напрямую.Эти модели представлений могут и должны нести дополнительные данные, необходимые представлению.Во-вторых, вы можете использовать перегрузки в DisplayFor / EditorFor для передачи дополнительных данных вида в шаблон.Таким образом, ваш шаблон может быть специфичным для конкретной доменной модели и при этом иметь доступ к дополнительным данным в модели представления.

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

Для статических неизменяемых списков, таких как сокращения состояний, вы можете использовать состояние приложения или запись в кэше.Эти типы списков могут быть загружены в Application_Start из базы данных.

...