2009-09-30 7 views
1

J'ai une application ASP.NET MVC contenant 2 zones de liste: #AvailableItems & #AssignedItems. Je peux transférer des articles d'une boîte à l'autre.Comment soumettre le contenu de 2 zones de sélection

J'ai également d'autres valeurs connexes stockées en tant qu'attributs sur le lien Enregistrer qui doivent également être soumises, comme les ID et autres. Quand je posterai les données, je peux présenter les attributs assez facilement (puis ModelBind dans la méthode d'action) en utilisant le jQuery suivant:

$.post($(this).attr("href"), $.getAttributes($(this)), function(result) 

{ 
    //do some fancy stuff 
} 

, "json"); 

Lorsque je clique sur « Enregistrer » Je voudrais être en mesure de soumettre le contenu des deux zones de liste à une méthode Action sur le contrôleur associé. Idéalement, la méthode d'action prendrait la forme de quelque chose comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult UpdateFactsheetUniverse(WebFactsheetUniverse wfu 
    , List<string> availableItems 
    , List<string> assignedItems) 
{ 
    // do some fancy stuff 
    return Json("saved"); 
} 

Cany quelqu'un suggère comment je pourrais rassembler les contenus à la fois la liste et de les soumettre en même temps que le reste des données, de sorte que ma méthode d'action peut les prendre comme paramètres?

Sinon, quelqu'un pourrait-il suggérer une autre solution?

Merci

Dave

Répondre

1

Je pense que finalement, pour le liant modèle fonctionne, vous devrez finir avec les paramètres de forme qui ressemblent à:

&availableItems[0]=blah&availableItems[1]=foo&assignedItems[0]=bar&... 

Cela permettra le classeur modèle pour analyser les paramètres de formulaire dans un tableau (pas sûr qu'il fera une liste, mais vous pouvez l'essayer et si cela ne fonctionne pas, changez en utilisant la chaîne [] à la place).

En supposant que vous utilisez un multiselect pour cela, il pourrait ressembler à:

var params = '' 
$('#AvailableItems option').each(function(i) { 
    params += '&availableItems[' + i + ']=' + $(this).val(); 
}); 
$('#AssignedItems option').each(function(i) { 
    params += '&assignedItems[' + i + ']=' + $(this).val(); 
}); 
+0

Ce fait - j'ai maintenant toutes les données dont j'ai besoin dans ma méthode d'action pour continuer. Merci bud. – DaveDev

Questions connexes