2009-04-17 3 views
4

Je sais que cette question a été abordée avant par exemple herePoster un tableau d'objets complexes avec JSON, JQuery à ASP.NET MVC contrôleur

Mais les solutions ne semblent pas correspondre à mon problème.

Voici mon code HTML. Le nombre de lignes est variable

<table id="workPlanTable"> 
    <tr> 
     <th> 
      Begin 
     </th> 
     <th> 
      End 
     </th> 
    </tr> 

    <tr itemId="1"> 
     <td><input class="begin" id="begin_1" name="begin_1" type="text" value="5:30" /></td> 
     <td><input class="end" id="end_1" name="end_1" type="text" value="11:30" /></td> 
    </tr> 
    <tr itemId="3"> 
     <td><input class="begin" id="begin_3" name="begin_3" type="text" value="5:30" /></td> 
     <td><input class="end" id="end_3" name="end_3" type="text" value="7:30" /></td> 
    </tr> 

</table> 

Les js construit un tableau d'objets et les postes à un procédé de commande

<script type="text/javascript"> 
$(function() { 

    submitForm = function() { 
     var items = new Array(); 
     $("#workPlanTable tr").each(function(i) { 

      var end = $(this).find(".end").val(); 
      var begin = $(this).find(".begin").val(); 

      var item = { 
       "Begin": begin, 
       "End": end 
      }; 
      items.push(item); 

     } 
     ); 

     var postData = { myItems: items }; 

     $.ajax({ 
      url: '~/WorkPlan/AjaxUpdate', 
      type: 'POST', 
      dataType: 'json', 
      data: postData, 
      contentType: 'application/json; charset=utf-8', 
      success: function(result) { 
       alert(result.Result); 
      } 
     }); 

    } 

} 
)  
</script> 

Chaque ligne représente un WorkPlanItem que. Mon but est de les poster tous à mon contrôleur pour les mettre à jour.

Je ne peux pas sembler firugre comment accéder au tableau dans ma méthode de commande (AjaxUpdate)

Répondre

8

Vous pouvez sérialiser la forme comme Vikas posted, ou vous pouvez utiliser un stringifyfunction si vous préférez marcher la page (comme vous le faites actuellement) et utilisez le tableau postData.

Sur le contrôleur, vous devez gérer la chaîne JSON. Vous pouvez utiliser le System.Web.Script.Serialization.JavaScriptSerializerclass pour le désérialiser. Si vous avez un objet mappé aux données que vous transmettez, vous pouvez utiliser la méthode Deserialize. Si vous ne le faites pas, vous pouvez toujours utiliser DeserializeObject, mais cela vous donne une collection Dictionary<string, string> que vous devrez parcourir pour obtenir vos données. Pas vraiment amusant (croyez-moi), mais ça marche.

+0

Merci pour votre réponse. J'ai fini par utiliser la fonction stringify + JavaScriptSerializer – Rasmus