2014-06-11 1 views
3

J'ai récupéré des données de mon formulaire Web et les ai mises dans un objet en utilisant Javascript sur button_click. J'ai alors essayé d'utiliser Ajax et JSON pour passer l'objet à une méthode dans mon code C#.Passer des objets Javascript à C#

Javascript:

$(document).ready(function() { 
    $("#go").click(function() { 
     $('#<%=gv_Rota.ClientID%>') 
      .find('tr') 
      .each(function (row) { 
       $(this).find('select') 
        .each(function (col) { 
         $ctl = $(this) 
         if ($ctl.is('select')) { 
          var shift = $ctl.val(); 
          var day = row; 
          var wk = col + 1; 
          var objectitem = { ShiftId: shift, Day: day, Week: wk }; 
          $.ajax({ 
           url: '/Administration.aspx/StoreObject', 
           type: 'POST', 
           contentType: 'application/json', 
           data: JSON.stringify({ myObject: objectitem }) 
          }); 
         } 
        }); 
       }); 
      }); 
     }); 

C# derrière:

[WebMethod] 
public static void StoreObject(string[] myObject) 
{ 

} 

Dans le Javascript, vous pouvez voir que les boucles autour d'un GridView et trouve le selectedvalues de DropDownLists à l'intérieur du GridView. Par conséquent, le Javascript va s'exécuter plusieurs fois, ce qui signifie que plusieurs objets vont être passés. Comment puis-je sauvegarder tous ces objets passés à C# dans les lignes d'un DataTable, par exemple, qui peut ensuite être utilisé lorsque j'appuie sur un bouton 'Enregistrer'. Premièrement, je ne suis pas sûr de ce qui se passe dans la méthode StoreArray, et deuxièmement, je ne suis pas sûr de ce qui serait le meilleur moyen de conserver le DataTable par exemple (si c'est ce que je stocke mes objets), après avoir appuyé sur "Enregistrer" bouton et PostBack, comme je suis sûr qu'il serait réinitialisé à cause de cela?

+0

c'est un objet non tableau qui est passé de js –

+0

@EhsanSajjad Question éditée. Merci pour la correction. – EliotE123

+0

il est encore objet pas tableau –

Répondre

4

Créer une classe en C# qui reflète l'objet que vous avez dans votre JavaScript

Quelque chose comme ceci:

public class Item 
    { 
     public string Id { get; set; } 
     public string Day { get; set; } 
     public string Week { get; set; } 
    } 

alors attendez-vous que vous entrez

[WebMethod] 
public static void StoreObject(Item myObject) 
{ 

} 

Edit:

Si vous souhaitez enregistrer les éléments dans une collection, vous pouvez créer une liste de Ite ms comme ceci:

private List<Item> myList = new List<Item>(); 

[WebMethod] 
public void StoreObject(Item myObject) 
{ 
    myList.Add(myObject); 
} 

NB: cela ne peut pas être statique pour que cela fonctionne. Je ne suis pas sûr que WebMethods supporte les méthodes statiques. Sinon vous devez faire une page asmx pour héberger la méthode See here

+0

Merci pour votre réponse. Et puis, une fois que Item a été rempli par l'un de mes objets, que puis-je faire dans la méthode StoreObject pour enregistrer cela dans une collection? Et puis être en mesure de sauvegarder la collection de sorte qu'il ne réinitialise pas à zéro lorsque je PostBack pour le récupérer. – EliotE123

+0

Pour l'instant je dois l'enregistrer dans une collection en mémoire jusqu'à ce que j'appuie sur le bouton 'Enregistrer', dans lequel je vais ensuite le passer à mon service Web. Par conséquent, je dois juste être en mesure de l'enregistrer dans une collection qui ne sera pas effacé lorsque je PostBack sur le bouton «Enregistrer» plus tard. – EliotE123

+0

Je peux travailler à partir de ça et le faire fonctionner comme j'en ai besoin. Merci pour la réponse. – EliotE123

Questions connexes