本例旨在說明我的一種Controller接收ajax提交(POST)過來的json對象或數組信息的方式,感覺應該有更好的方式,歡迎提出寶貴意見。
JSON.stringify(jsonObj)不支持IE8以下瀏覽器
前端頁面代碼如下:
1 <script type="text/javascript" src="~/Scripts/jquery-1.11.3.js"></script> 2 <form id="fm"> 3 <div> 4 <input id="btn" type="button" value="提交" onclick="SaveTest()" /> 5 </div> 6 </form> 7 <script> 8 function SaveTest() { 9 var jsonObj = []; 10 jsonObj.push({"id":1,"name":"123"}); 11 jsonObj.push({"id":2,"name":"234"}); 12 jsonObj.push({ "id": 3, "name": "345" }); 13 $.ajax({ 14 url: "/Test/Save", 15 type: "post", 16 dataType: "json", 17 async:false, 18 data: JSON.stringify(jsonObj), 19 success: function (data) { 20 21 }, 22 error: function (XMLHttpRequest, textStatus, errorThrown) { 23 alert(XMLHttpRequest.status); 24 alert(XMLHttpRequest.readyState); 25 alert(textStatus); 26 } 27 }); 28 } 29 </script>
Controller->Action代碼如下(需引用System.IO和System.Web.Script.Serialization命名空間):
1 [HttpPost] 2 public ActionResult Save() 3 { 4 var sr = new StreamReader(Request.InputStream); 5 var stream = sr.ReadToEnd(); 6 JavaScriptSerializer js = new JavaScriptSerializer(); 7 var list = js.Deserialize<List<Models.SelectList>>(stream); 8 if (list.Any()) 9 { 10 foreach (var item in list) 11 { 12 13 } 14 } 15 return View(); 16 }
SelectList對象類(類這里可以加[Serializable]或者不加,因為沒有直接傳輸或存儲SelectList對象,所以我這里沒有加)
1 public partial class SelectList 2 { 3 public int id { get; set; } 4 5 public string name { get; set; } 6 7 public string text { get; set; } 8 }
大體思路是將json對象或數組轉換為字符串,由前端傳入服務端,Request接收,然后使用json反序列化為實體對象。試過action直接加string參數,但進入action后,接收不到傳過來的json字串。當然,也可以將json字串直接保存在隱藏域,form提交到服務端獲取。