2017-10-19 23 views
0

Je souhaite transmettre un tableau d'ID à un contrôleur. Au départ, j'ajoutais chaque ID dans la chaîne de requête comme ceci:Passage d'un tableau à un contrôleur MVC

http://localhost:4000/customers/active?customerId=1&customerId=2&customerId=3

Ensuite, sur le côté du contrôleur I avait une méthode qui accepterait le tableau comme celui-ci:

GetCustomers([FromQuery] int[] ids) 
{ 
    ... 
} 

Ce fonctionnait bien mais il y a quelques situations où il y a tellement de customerIds dans le tableau que la chaîne de requête est devenue trop longue que j'ai dû modifier la façon dont la requête était passée à ceci:

http://localhost:4000/customers/active?customerIds=1,2,3

J'ai obtenu la solution de travail en changeant GetCustomers params d'accepter une chaîne au lieu d'un tableau int puis a analysé le customerIds dans le contrôleur (en utilisant .Split(','))

Je me sens comme il était plus propre à passer un tableau directement au lieu d'avoir à modifier la chaîne du côté serveur. Existe-t-il un moyen d'y parvenir compte tenu de la manière dont les codes customerIds sont maintenant transmis?

+0

https://stackoverflow.com/questions/37768245/web-api-pass-array-of-entiers-to-action-method/37768858 # 3776 8858 – Nkosi

+0

[Paramètre de chaîne de requête séparé par une virgule de liaison de modèle] (https://stackoverflow.com/q/9584573/3110834) –

+0

L'action est-elle un POST ou GET? – Nkosi

Répondre

0

Vous pouvez transmettre les ID en tant qu'objet JSON dans le corps du message en utilisant une demande POST sur le frontal et la balise [FromBody] sur le contrôleur principal. De cette façon, votre URL ressemblera à ceci: http://localhost:4000/customers/active, peu importe le nombre d'ID présents dans le corps du message. Cela vous évite également d'avoir à extraire et à pousser chaque paramètre dans un nouvel élément de tableau.

1

1. UTILISATION POST

2. utiliser Ajax & DATA SEND AS JSON

$.ajax({ 
      type: "POST", 
      url: "/Home/GetCustomers", 
      data : { stringOfCustomerIds : JSON.stringify(arrCustomerIds)}, 
      dataType: "json", 
      success: function (response) { 
       //do something with the response 
      } 

& sur le côté du contrôleur

public JsonResult GetCustomers(string stringOfCustomerIds) 
{ 
    JObject CustomerIdsJson = JObject.Parse(listOfCustomerIds); 

     foreach (JProperty property in CustomerIdsJson .Properties()) 
     { 
      Console.WriteLine(property.ID+ " - " + property.Value); 
     } 

     return Json(output, JsonRequestBehavior.AllowGet); 

} 
+0

Si vous allez faire un POST, alors ce serait simplement 'data: JSON.stringify ({stringOfCustomerIds: arrCustomerIds}),' avec 'contentType: 'application/json'' et la méthode serait 'public JsonResult GetCustomers (int [] stringOfCustomerIds)' (laisser le 'ModelBinder' faire son travail) –