2010-02-24 10 views
3

j'ai une vue qui contient 2 zones de liste: Audience & Localemodèle de liaison aux types multiples avec les mêmes noms de propriété

Je suis en train de soumettre un formulaire qui contient l'index sélectionné des deux à mon contrôleur, qui a une méthode d'action de cette signature:

public JsonResult Submit(Audience aud, Locale loc) 
{ 
// do stuff 
} 

le problème que je vais avoir est à la fois l'audience & Locale ont une propriété d'ID, de sorte que le modèle Binder est un peu confus sur lequel assigner les valeurs sélectionnées à. Les deux reçoivent la valeur '1', quand Audience devrait avoir '2' et Locale devrait avoir '1'

La question est comment puis-je obtenir la page pour différencier les deux quand il est soumis? Nous avons essayé de préfixer la valeur d'ID pour Locale avec "locale.", De sorte que la chaîne de paramètre qui est passée en tant que données au contrôleur ressemble à "&locale.id=1&audience.id=2" mais cela ne semble pas fonctionner.

Des suggestions? Si plus d'informations sont nécessaires, je le fournirai.

Merci

Dave

Répondre

3

Utilisation:

public JsonResult Submit([Bind(Prefix = "audience")]Audience aud,[Bind(Prefix = "locale")]Locale loc) 
{ 
// do stuff 
} 

Chaque champ public doit avoir le préfixe "public" dans le nom dans le champ html: audience.id, audience.name, ...

<input id="audience_name" name="audience.Name" type="text" value="" /> 
+0

Yep ce son comme Une autre option consistera à utiliser un seul ViewModel et à l'intérieur de mettre les deux classes Entity (comme Keith dit), donc ce sera MyViewModel.Audience et MyViewModel.Locale suivant la convention de nom pour l'élément d'entrée mentionné précédemment par Luk. – JOBG

+0

Dans votre exemple, vous spécifiez explicitement le préfixe. Je pensais que le Model Binder pourrait en déduire cela? – DaveDev

+0

@Dave: AFAIK cela ne signifie pas, mais cela pourrait avoir changé entre les versions MVC. Il serait préférable de déduire si vous avez utilisé la classe ViewModel. – LukLed

2

Vous devriez avoir un ViewModel spécifique pour prendre des données dans votre action de soumission. Cet objet doit avoir AudienceId et LocaleId. Lorsque vous créez vos listes déroulantes, vous devez les créer avec des noms correspondant à vos attentes.