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