Сводка:
Если вы используете шаблоны 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
и т. Д .?