2010-03-17 5 views
0

J'ai un objet avec une propriété appelée "nom". Cet objet possède un sous-objet qui a également une propriété appelée "nom".Problème de liaison ASP.NET MVC

Transaction.name 

Transaction.TransactionItem 

TransactionItem.name 

I se lient objet de transaction à un contrôle partiel comme d'habitude:

Html.TextBox("name", Model.name)%> 

modèle est un objet de transaction.

Je lient TransactionItems:

<% if (Model.mtTransactionItem != null) 
    { 
     foreach (var item in Model.mtTransactionItem) 
     { %> 
    <tr> 
     <td> 
      <%= Ajax.ActionLink(item.name, "ShowItem", new { id = item.id }, new AjaxOptions { UpdateTargetId = "dialog-form" })%> 
     </td> 

Et quand mettre à jour l'un des éléments de transaction par le biais d'un appel Ajax je passe la totalité de l'objet de la transaction à la vue partielle.

Lorsque je débogue, je vérifie la propriété Model.name, et il a une valeur correcte. Mais sur la page affiche le nom de TransactionItem valeur au lieu du nom de Transaction valeur.

Qu'est-ce que je fais mal?

J'ai vérifié ce problème dans les frameworks MVC 1.0 et MVC 2.0.

Répondre

1

Votre description n'est pas claire pour moi, mais je vais vous donner de bons conseils. Au lieu de créer des champs comme ça:

Html.TextBox("name", Model.name) 

utilisation

Html.TextBox("transaction.name", Model.Name) 

puis

ActionResult Save(Transaction transaction); 

Valeur du préfixe doit être le même que le paramètre de la fonction.

Si vous présentez des composants pour les articles sur la même page, utilisez

Html.TextBox("transactionitems[i].name", Model.name) 

ou pour un article

Html.TextBox("transactionitem.name", Model.name) 

Ne pas utiliser le même nom de champ pour les différents composants à la page, car peut causer des problèmes avec ModelState. Lisez à propos de l'utilisation des préfixes, cela va probablement sauver certains de vos problèmes.

Rappelez-vous également qu'avec MVC 2 vous disposez de DataAnnotations, qui facilitent la création de formulaires.