2016-11-16 3 views
0

Ich versuche, ein JSON-Array und einen Wert mit HTTP-Post übergeben. Der Wert wurde übergeben, aber das Array nicht. Der Wert von responseList im Javascript-Controller lautet: "[{" correct ":" false "," answer ":" a1 "}, {" korrekt ": true," answer ":" a2 "}]"Angular - Pass-Array mit HTTP-Post

javascript-Controller

function setMultiQuestion(question, responses) 
{ 

var jsonData = angular.toJson(responses); 
var responsesList = {'object':jsonData};; 

$http.post(baseUrl + "Admin/insertMultiAnswers", { question: question, responsesList: responsesList }) 
.success(function (data, status, headers, config) { 
}) 
.error(function (data, status, header, config) { 
}); 
} 

MVC-Controller

[HttpPost] 
public ActionResult insertMultiAnswers(MultiChoiceQuestionModel model) 
{ 
try 
{ 
    model.setMultiAnswer(); 
    Response.StatusCode = 200; 
    return Content("Sucess"); 
} 
catch (Exception ex) 
{ 
    Response.StatusCode = 500; 
    return Content("Fail"); 
} 
} 

MODEL

public class answerObj 
{ 
public bool correct { get; set; } 
public string answer { get; set; } 
} 

public class MultiChoiceQuestionModel 
{ 
public string question { get; set; } 
public List<answerObj> responsesList = new List<answerObj>(); 



public void setMultiAnswer() 
{ 
using (ATLASEntities atlasEntity = new ATLASEntities()) 
{ 
    Console.Write(responsesList.Count); 
} 
} 
+0

Warum machst du das? 'var AntwortenListe = {'Objekt': jsonData} ;;'? –

+0

Wo ist die Methode 'insertMultiAnswers', auf die Sie in js verweisen? –

+0

Sie können eines von zwei Dingen tun ... halten Sie es als ein JSON-Objekt und fügen Sie das FromBody-Attribut zu Ihrem Endpunkt hinzu oder konvertieren Sie es in eine JSON-Zeichenfolge mit json.stringify() und nehmen Sie es als eine Zeichenfolge in den Endpunkt dann serialisieren Sie es wieder in ein Objekt. Ich bevorzuge die erste Methode. – jbrown

Antwort

0
angular.toJson(responses) 

serialisiert die Zeichenfolge nicht an ein Objekt. Sie sollten nur tun

responsesList: responses 
+0

Danke. Ursprünglich habe ich das gemacht. Es funktioniert nicht – user6934713

0

Um braucht das Objekt aus der json auf eine Liste abgebildet zu werden ein Array sein.

Also, wenn Sie unter

ändern
var responsesList = {'object':jsonData};; 

zu so etwas wie:

var responsesList = [{'correct':true,'answer':'Meow'}, {'correct':true,'answer':'Woof'}]; 

wird es funktionieren.

+0

Ich habe genau das gleiche json aber nicht funktionieren – user6934713

0

Ich nehme an, dass Sie einfache Array ([]) von responses und nicht Array, das innerhalb der Zeichenfolge Wert ("[]") ist. Versuchen Sie Folgendes:

function setMultiQuestion(question, responses){ 

    var myObj = {}; 
    myObj = JSON.stringify({question: question, responsesList: responses}); 

    $http.post(baseUrl + "Admin/insertMultiAnswers", myObj) 
    .success(function (data, status, headers, config) { 
    }) 
    .error(function (data, status, header, config) { 
    }); 
} 

Möglicherweise müssen Sie diese Zeichenfolge in Ihrem Back-End analysieren.