2010-04-16 7 views
2

J'ai une classe ViewModel pour encapsuler les modèles "Personnel" et "Professionnel". Mon problème est que les deux modèles ont une propriété appelée "Email" et la liaison de modèle n'est pas capable de faire la distinction entre les deux.Deux champs avec le même nom

J'ai lu que [Bind(Prefix = ... est utilisé pour résoudre ce problème, mais je n'ai pas été en mesure de voir un exemple concis sur la façon d'y parvenir.

public class BusinessFormViewModel 
{ 
    public Business Business { get; set; } 
    public ContactPerson ContactPerson { get; set; } 

    public BusinessFromView(Business business, ContactPerson contactPerson) 
    { 
     Business = business; 
     ContactPerson = contactPerson; 
    } 
} 

Comment utiliser le préfixe de liaison pour résoudre ce problème?

+0

Comment votre formulaire est-il en cours de construction? Comment est-ce lié? Besoin de plus d'informations pour diagnostiquer avec précision votre problème de dénomination. – Jab

Répondre

1

Je crois que si les éléments de formulaire qui sont postés ont des préfixes inclus dans le nom, la liaison sera faite correctement. C'est ainsi que les assistants basés sur des modèles (c'est-à-dire EditorFor) rendent les contrôles, et mes modèles de vue imbriqués sont liés correctement. Par exemple, dans votre cas, votre point de vue aurait des éléments de forme quelque chose comme ceci:

... 
<input type="text" name="Business.Email" value="<%=this.Model.Business.Email %>" /> 
... 
<input type="text" name="ContactPerson.Email" value="<%=this.Model.ContactPerson.Email %>" /> 
... 

Ou, en utilisant des aides templated (en mvc 2):

... 
<%= Html.TextBoxFor(m => m.Business.Email) %> 
... 
<%= Html.TextBoxFor(m => m.ContactPerson.Email) %> 
... 

Et votre contrôleur serait tout simplement prendre un BusinessFormViewModel en tant que paramètre, comme tel:

public BusinessFromView(BusinessFormViewModel businessForm) 
{ 
    Business = businessForm.Business; 
    ContactPerson = businessForm.ContactPerson; 
} 
+0

Je n'utilise pas MVC 2, cela signifie-t-il que je dois créer des éléments d'entrée pour tous mes champs? Quel est le problème avec [Bind (Prefix = ...? –

+0

Je ne suis pas familier avec Bind (préfixe ... Comment créez-vous actuellement les éléments de formulaire qui sont affichés? – Luke