2012-04-20 25 views
0

來自Android設備的JSON字符串集合傳遞給.net MVC HttpPost方法。我的JSON字符串就像。Json字符串列表是空的

{"collection",[{"Name":"A","Age":"12","Class":"10"},{"Name":"B","Age":"12","Class":"10"}]} 

我的MVC控制功能:

[HttpPost] 
    public ActionResult Create(string[] collection) 
    { 
     try 
     { 
      // TODO: Add insert logic here 
      JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
      List<Model.StudentBehaviour> stdbehaviour_list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Model.StudentBehaviour>>(collection); 
      Lib.StudentModule.StudentManager.InsertStudentBehaviours(stdbehaviour_list);    
      return Json("success", JsonRequestBehavior.AllowGet); 
     } 
     catch 
     { 
      return Json("exception", JsonRequestBehavior.AllowGet); 
     } 
    } 

函數的參數值是

collection = "(Collection)" 
在收集

期望值

collection[0] 
Name = A 
Age = 12 
Class = 10 
collection[1] 
Name = B 
Age = 12 
Class = 10 

請幫忙解決這個問題

在此先感謝

回答

0

ASP.NET MVC有ModelBinding的概念。這意味着如果您將參數添加到Action方法中,MVC將嘗試使用您發送的數據填充這些參數。

這意味着您可以更改您的代碼:

// Example of your Student class. 
// Make sure that all properties you want to bind to are public 
public class Student 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public int Class { get; set; } 
} 

// Example of an Action method. Note that instead of taking a string as parameter, 
// you just accept a collection of Student objects. 
[HttpPost] 
public JsonResult Create(List<Student> collection) 
{ 
    if (ModelState.IsValid) 
    { 
     return Json("success", JsonRequestBehavior.AllowGet); 
    } 
    else 
    { 
     return Json("exception", JsonRequestBehavior.AllowGet); 
    } 
} 

然後,您可以使用下面的jQuery來發表您的數據:

function sendData() {  
     var data = [{ 'Name': 'A', 'Age': '12', 'Class': '10' }, 
      { 'Name': 'B', 'Age': '12', 'Class': '10' }]; 

     var collection = JSON.stringify(data); 

     $.ajax({ 
      url: "Home/Create", 
      type: "POST", 
      data: collection, 
      dataType: 'json', 
      contentType: 'application/json; charset=utf-8', 
     }).done(function (msg) { 
      alert("Data Saved: " + msg); 
     }); 
    } 
+0

感謝沃特,德科爾特,我會試試這個方法,我有一個快速的問題是你的參數名稱和JSON鍵應該是相同的?例如:如果我通過{「姓名':'A','年齡':'12','等級':'10'}, {'姓名':'B','年齡' :'12','Class':'10'}]。但我的HttpPost函數參數名稱是集合是否會造成任何問題? – 2012-04-20 08:22:11

+0

是的,他們應該是一樣的。 ModelBinding用於匹配參數名稱和請求中找到的數據。 – 2012-04-20 08:23:07

+0

你好Wouter de Kort,我實現了你給出的代碼。但仍然是空的。我在Global.ascx中必須做的任何事情。 – 2012-04-20 09:28:54