Si vous utilisez les modèles d'ASP.NET MVC 2 pour afficher un DropDownList, comment accéderiez-vous à la liste d'options s'ils étaient stockés dans Model.property de View de niveau supérieur? En outre, existe-t-il un moyen [DataAnnotation] d'associer cette liste? Des liens vers des exemples seraient très utiles.
Contexte:
Dans ASP.NET MVC 2, vous pouvez créer une classe personnalisée comme StateName
et utiliser un EditorTemplate appelé StateName.ascx
, qui affiche ce point de vue partielle chaque fois qu'il trouve une propriété StateName
. Brad Wilson a un grand article here le décrivant. Ces modèles de vue partielle peuvent être imbriqués de sorte que chaque modèle ne traite que de sa propre portée (en faisant correspondre la portée du modèle aux propriétés POCO correspondantes).
Configuration:
Maintenant, imaginez que le StateName.ascx
rend un DropDownList et a besoin de la liste des états possibles ([{ "AL", "Alabama"}, { "PA", "Pennsylvania"}, ... ]). Généralement, le modèle de vue de niveau supérieur a tout ce dont nous avons besoin pour rendre à la fois le DomainModel (comme notre ShoppingCart), et toutes les données diverses comme les listes pour les listes déroulantes.
Question:
Ainsi, la question est de savoir comment un modèle de référence vue partielle StateName.ascx
la propriété vue de niveau supérieur non partiel du modèle IList<StateName> States
pour alimenter le DDL dans le modèle de vue partielle? (en particulier si vous avez plusieurs rendus imbriqués ou deep dive
tels que Model.Customer [0] .BillingAddress.State, la vue parent du modèle n'est peut-être pas la vue de niveau supérieur).
Un autre angle peut être de mettre une sorte de [Annotation de données] sur la propriété de classe qui associe cette liste d'états possibles au modèle du modèle de vue partielle?
Par exemple, voici le niveau haut de page Voir Modèle:
Model.ShoppingCart.Customer.ShippingAddress;
Model.ShoppingCart.Customer.BillingAddress;
Model.StateNames; // IList<StateName>
Model.MaritalStatusNames; // IList<MaritalStatus>
Model.GenderNames; // IList<Gender>
De plus nous pourrions faire toutes les listes de données dans une propriété DDL, comme Model.DDLs.StateNames
, Model.DDLs.GenderNames
, etc.?