2017-02-01 2 views
-3

Je veux juste passer un objet tableau de mon javascript au contrôleur. Bien que jusqu'à alerte il donne la valeur checkbox, donc je crois qu'il n'y a rien de mal en javascript. Dans le contrôleur, l'objet est toujours nul. qu'est-ce que je fais mal ici?Essayer de passer un objet tableau à mon contrôleur de service Web, mais toujours null

function amal() { 

var selected = []; 

$('input[type="checkbox"]:checked').each(function() { 

    selected.push($(this).val()); 
}); 
alert(selected); 

$.ajax({ 
    url: "http://localhost:63138/api/Emptbles/LoadAmal", 
    type: "POST", 
    data: selected, 

    contentType: "application/json", 
    success: function (response) { 
     alert("success"); 
     myFunction(); 
    }, 
    error: function() { 

    } 
}); 

Mon contrôleur api

[HttpPost] 
    public IHttpActionResult LoadAmal(List<selectedSymptoms>list) 
    { 
     string item1 = ""; 
     string item2 = ""; 
     string item3 = ""; 


     for (int i = 0; i < list.Count; i += 3) 
     { 
      //grab 3 items at a time and do db insert, 
      // continue until all items are gone.. 
      item1 = list.ElementAt(i+0).ToString(); ; 
      item2 = list.ElementAt(i + 1).ToString(); ; 
      item3 = list.ElementAt(i + 2).ToString(); ; 
      // use the items 
     } 

     string query = "EXEC Add_Employee'" + item1 + "','" + item2 + "','" + item3 + "'"; 

     int result = connectionProvider.CreateSomething(query); 


     return Ok(result); 
} 

Ma selectedSymptoms classe (je ne sais pas si cela est juste, je veux juste prendre objet jason au contrôleur. Merci)

public class selectedSymptoms 
{ 
    public void PassThings(List<selectedSymptoms> symtoms) 
    { 
     var t = symtoms; 
    } 


} 
+1

besoin de voir ce 'selectedSymptoms' ressemble. Les objets doivent partager les mêmes propriétés pour que le sérialiseur puisse mapper les propriétés de la demande. Ce serait différent si c'était le type 'Liste ' (ou un autre type simple) –

+0

La publication du code dans les commentaires ne fonctionne pas. Vous aurez besoin de modifier votre question –

+0

@Mark j'ai ajouté la classe rqquested. pourriez-vous s'il vous plaît jeter un coup d'oeil? – Amal

Répondre

-1

Essayez ce:

data: { 'list' : selected } 
0

Le scénario que vous utilisez est un problème de sérialisation entre l'objet que vous envoyez et l'API Web. Microsoft gives you code to test this process, que je vous recommande d'utiliser car il vous en apprendra beaucoup.

Qu'est-ce que vous envoyez dans votre réponse serait probablement ressembler à ceci:

["someValue1", "someValue2", "etc"] 

Le Type dans votre API doit être sérialisable, et il n'y a aucun moyen possible de le faire compte tenu de votre classe actuelle. Si tout ce que vous voulez faire est d'envoyer une liste de chaînes, alors vous ne devriez pas utiliser un objet complexe du tout et utilisez simplement List<string>. Si vous voulez en effet utiliser un objet complexe, il a besoin de propriétés pour mapper les données.

Si j'avais une classe

public class Person 
{  
    public string Name {get; set;} 
} 

Je voulais poster une représentation de l'objet javascript de cela, mon code ressemblerait à ceci:

var people = []; 

$('input[type="checkbox"]:checked').each(function() { 
    var Person = new Object(); 
    Person.Name = $(this).val(); 
    people.push(Person); 
}); 

$.ajax({ 
    url: "http://localhost:63138/api/Emptbles/LoadAmal", 
    type: "POST", 
    data: people, 
    contentType: "application/json", 
    success: function (response) { 
    }, 
    error: function() { 
    } 
}); 

Vous pouvez voir comment nous créons essentiellement une tableau d'une version JavaScript de notre classe C#, et il peut facilement mapper la propriété Name entre les 2 objets.

API

ressemblerait à ceci:

public IHttpActionResult GetStuff(List<Person> peeps) {}