ASP.NET MVC 2: аннотация или шаблон данных: способ связать DDL с его списком опций Model.data? - PullRequest
0 голосов
/ 16 июля 2010

Сводка:

Если вы используете шаблоны ASP.NET MVC 2 для рендеринга DropDownList, как бы вы получили доступ к списку опций, если они хранятся в Model.property View верхнего уровня?Кроме того, есть ли способ [DataAnnotation] связать этот список?Ссылки на примеры были бы очень полезны.

Справочная информация:

В ASP.NET MVC 2 вы можете создать собственный класс, например StateName, и использовать EditorTemplate с именем StateName.ascx, который будетотображать это частичное представление каждый раз, когда он находит свойство StateName.У Брэда Уилсона есть отличная статья здесь , описывающая ее.Эти шаблоны частичного представления могут быть вложенными, так что каждый шаблон имеет дело только со своей собственной областью (сопоставляя область шаблона с соответствующими свойствами POCO).

Setup:

Теперь представьте, что StateName.ascxотображает DropDownList и нуждается в списке возможных состояний ([{"AL", "Alabama"}, {"PA", "Pennsylvania"}, ...]).Как правило, модель представления верхнего уровня имеет все, что нам нужно для отображения как DomainModel (например, нашей ShoppingCart), так и любых других данных, таких как списки для выпадающих списков.

Вопрос:

Итак, вопрос в том, как шаблон частичного представления StateName.ascx ссылается на свойство Model не-частичного представления верхнего уровня IList<StateName> States для заполнения DDL в шаблоне частичного представления? (особенно если у вас есть несколько вложенных или deep diveрендеринга типа Model.Customer [0] .BillingAddress.State, родительское представление шаблона может не быть представлением верхнего уровня).

Другим углом может быть наложение своего рода [Аннотации данных] на свойство класса, которое связывает этот список возможных состояний с моделью шаблона частичного представления?

Например, вот верхний уровеньМодель представления:

Model.ShoppingCart.Customer.ShippingAddress;
Model.ShoppingCart.Customer.BillingAddress;
Model.StateNames;         // IList<StateName>
Model.MaritalStatusNames; // IList<MaritalStatus>
Model.GenderNames;        // IList<Gender>

Кроме того, мы можем сделать все списки данных DDL в одном свойстве, например Model.DDLs.StateNames, Model.DDLs.GenderNames и т. Д .?

1 Ответ

1 голос
/ 16 июля 2010

Я думаю, что короткий ответ состоит в том, что частичный шаблон не может получить доступ ко всей Модели родителя, потому что он получает только подмодель, с которой он должен работать.

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

...