2010-03-26 14 views
0

Est-ce possible? Ce que je veux faire est de passer une liste d'objets comme un paramètre dans un lien d'action
Au moment où j'essaye de faire ceci la liste est toujours vide au moment où elle atteint le contrôleur!Passer une liste d'objet d'une vue au contrôleur dans asp.net mvc?

De l'avis

<%= Url.Action("ActionName", new { list = Model.ListOfObjects}) %> 

Dans le contrôleur

public ActionResult ActionName(List<Object> list) 
    { 
     //Do stuff 
    } 
+0

Quelle URL est rendue? – SLaks

+0

/Controller/Object?list=System.Collections.Generic.List%601%5BObject%5D – Boob

+0

Désolé cela devrait être /Controller/ActionName?list=System.Collections.Generic.List%601%5BObject%5D – Boob

Répondre

0

Bien qu'il puisse prendre la liste des objets, il ne sera probablement pas rendre ce que vous attendez de voir; il peut effectivement aspirer les valeurs de la classe list (ou quelle que soit la classe représentée par cette liste) et l'utiliser comme params.

Pas à travers une requête get, sauf si vous écrivez manuellement les params et désérialisez aussi les params. Ou, au contraire, effectuez une publication sur le serveur avec ces valeurs dans le formulaire; alors, cela peuplerait correctement.

HTH.

1

En termes de savoir si c'est possible ou non - c'est possible, mais pas de la façon dont vous essayez. Gardez à l'esprit que cela se traduira par une URL qui sera analysée par MVC et les différents paramètres seront transmis à l'action soit en tant que paramètres directs ou via un classeur de modèle.

Je vous recommande d'essayer de comprendre à quoi l'URL devra ressembler et peut-être de faire du code personnalisé pour générer l'URL (peut-être utiliser une fonction d'aide personnalisée/méthode d'extension). Si vous combinez cela avec un classeur de modèle personnalisé, vous devriez avoir une solution assez élégante qui fait exactement ce que vous voulez.

Par exemple, si votre liste a 3 objets de type chaîne de caractères que vous pouvez écrire un assistant pour générer une URL comme ceci (disons la liste contient « première », « deuxième » et « troisième »)

/contrôleur/action? obj1 = premier & obj2 = seconde & obj3 = troisième

maintenant, il vous suffit d'écrire un modèle de liaison qui cherche des entrées appelées « obj1 », « obj2 », etc et il suffit d'ajouter les résultats dans une liste.

0

Quelque chose comme ceci fonctionnerait, je suggère de faire une aide pour contenir cette logique si vous en avez besoin dans beaucoup d'endroits.

<% var values = new RouteValueDictionary(); 
    for (int i = 0; i < Model.ListOfObjects.Count -1; i++) 
    { 
     values.Add("list["+i+"]", Model.ListOfObjects[i]); 
    }%> 
<%= Url.Action("ActionName", values); %> 

L'action saura comment gérer la liste dans le contrôleur.

Questions connexes