2010-02-10 7 views
2

J'ai fortement typées le modèle complexe suivant: Catégorie - a -> Liste qui a -> ListeComplex Object + Par défaut ModelBinder

Je suis en train de faire créer une action où je peux tirer toutes les catégories existantes et insérer pour chaque catégorie une liste tous ensemble, y compris les sous-éléments. Par exemple: -Cat1 - NewItemGroup1 --- --- NewItem1 NewItem2 --- --- NewItem3 NewItem4

-Cat2 - NewItemGroup2 --- --- NewItem1 NewItem2 --- NewItem3 --- NewItem4

Mes questions, puis-je réaliser cela en utilisant le modelbinder par défaut? ou devrais-je utiliser autre chose? et combien de travail cela ajouterait :)?

Merci!

Répondre

3

Vous pouvez faire des objets complexes et des listes avec le modelbinder par défaut, il vous suffit d'indexer vos données postées afin de pouvoir les comprendre correctement. L'article Model Binding to a List de Phil Haack couvre ce que vous devez faire. En un mot, juste indexer vos champs de liste avec un champ caché comme si:

<input type="hidden" name="products.Index" value="0" /> 
<input type="text" name="products[0].Name" value="Beer" /> 
<input type="text" name="products[0].Price" value="7.32" /> 

Le nom products.Index champ décrit qu'il ya pour votre liste « produits » un indice « 0 ». Les champs Nom et Prix sont alors des propriétés de l'objet à l'index 0. Notez que l'index ne doit pas nécessairement être un entier, donc si vous liez un dictionnaire, vous pouvez utiliser n'importe quelle valeur d'index.

+0

J'ai vu cette solution avant ... mais dans mon cas, c'est une liste dans une autre liste. Alors, je me demande si je peux vraiment compter sur les modélistes par défaut? – OneDeveloper

+0

Oui, vous pouvez. Vous pouvez imbriquer vos noms de propriété aussi profond que vous le souhaitez. Il pourrait être Category1 [0] .NewItemGroup1 [0], etc – womp

+0

c'est vraiment utile. thnx! – OneDeveloper