2009-02-12 7 views
5

J'ai un scénario sur lequel je suis bloqué - J'ai un objet de domaine auquel une collection d'objets est attachée. Quelque chose comme ceci:ASP.NET MVC - Gestion de plusieurs objets sous une forme

public class Person 
{ 
    public string Name { get; set; } 
    public IList<PhoneNumber> PhoneNumbers {get; set; } 
    public IList<Address> Addresses { get; set; } 
} 

L'interface utilisateur souhaitée par le client a un seul formulaire d'entrée pour l'ajout et la modification. Un utilisateur peut entrer 0 à plusieurs téléphones/adresses pour chaque personne. Comment gérer la publication de la collection de valeurs sur le contrôleur?

Je peux penser à quelques approches, mais toutes semblent brutales et peu élégantes. Existe-t-il une meilleure pratique pour gérer ce genre de problème?

Répondre

0

Dans le passé, j'ai utilisé la convention railsy pour cela.

<input name="Parent[childObjectType][serial_number]" type="textbox" value="" /> 

Donc, pour votre situation ce

<input name="Person[PhoneNumber][1]" type="TextBox" value="555-1212" /> 
<input name="Person[PhoneNumber][2]" type="TextBox" value="555-555-1212" /> 

et vous pouvez incrémenter le numéro de série et de reproduire l'élément en javascript pour obtenir plusieurs, et d'utiliser un FormCollection dans votre action qui vous donnera un moyen de obtenir ces éléments.

La valeur par défaut de l'équipe mvc est d'utiliser un ModelBinder et une syntaxe point pour cette opération. Cependant, jquery et d'autres frameworks javascript sont bloqués.

0

J'ai commencé à utiliser json et jQuery pour publier des types complexes dans une action de contrôleur en utilisant JSON.NET et un JsonFilter côté serveur qui prend automatiquement votre objet json et le sérialise au type C# équivalent. J'ai trouvé que c'était une solution très propre et plus facile à tester. Vous pouvez consulter ce post avec l'exemple de code à télécharger pour vous lancer sur la façon de le faire. C'est plutôt simple.

http://blogger.forgottenskies.com/?p=252

3

Il est soutenu par le cadre à l'aide d'un spécial « forme mise en page ». Phil Haack a un article à ce sujet, check this out

Modifier Scott Hanselman (http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx) vient de poster une mise à jour à ce sujet. En outre dans RC1 il semble (a couru dans ce mysel hier soir) que les index doivent être basés sur 0 et augmenter régulièrement (au moins si vous "liez" contre IList)

Edit2 Le lien n'a pas semblé fonctionner

0

Dans la publication de Hanselman mentionnée, il écrit que vous n'avez pas besoin d'index, vous avez juste le même nom pour les boîtes de saisie et avez un paramètre de tableau en action et cela fonctionne.

Questions connexes