2016-11-16 71 views
0

我想通過一個json數組和http post的值。該值已通過,但數組沒有。 javascript控制器中的respondList的值是:「[{」correct「:」false「,」answer「:」a1「},{」correct「:true,」answer「:」a2「}]」角度 - 傳遞數組與http post

JavaScript的控制器

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控制器

[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

你爲什麼這樣做? 'var responsesList = {'object':jsonData} ;;'? –

+0

你在js中引用的方法'insertMultiAnswers'在哪裏? –

+0

你可以做兩件事之一......將它保存爲json對象,並將FromBody屬性添加到端點或使用json.stringify()將其轉換爲json字符串,並將其作爲可以字符串然後將其序列化回一個對象。我更喜歡第一種方法。 – jbrown

回答

0
angular.toJson(responses) 

序列化爲字符串不是對象。 你應該只是做

responsesList: responses 
+0

謝謝。最初我是這麼做的。它不工作 – user6934713

0

爲了映射到一個列表從JSON對象需要是一個數組。

所以,如果你改變以下

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

喜歡的東西:

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

它將工作。

+0

我有完全相同的JSON,但不工作 – user6934713

0

我假設你從responses得到普通數組([]),而不是在字符串值("[]")中的數組。試試這個:

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) { 
    }); 
} 

你可能需要在你的後端解析這個字符串。