MVC傳遞資料-傳遞對象或對象集合,mvc傳遞
前言
本文主要介紹從View(或者js)檔案向Controller提交對象或者對象集合,比如,將表格中的一行資料作為一個對象提交,或將多行資料作為一個集合提交到Controller。
回顧
從View(或者js)檔案向Controller提交資料,你可能見過以下幾種方式:
$.ajax({ type: "POST", url: "/InviteBid/UpdateBidZRecord/?JudgeBidId=" + JudgeBidId + "&BidRecordId=" + BidRecordId, success: function (jsonResult) { }, error: function (data) { $.messager.alert("提示", "評標辦法提交失敗!", "warning"); return; } });
- 利用帶參數的路由的寫法(預設的路由,傳遞的參數是Id)
開啟用戶端中的Global.asax.cs檔案,會看到如下代碼:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值 ); }
上述是預設的路由,當然也可以編寫自訂的路由。這個預設的路由決定了你可以通過如下方式傳值,並在Controller中接收。
$('#dg ').datagrid({ url: '/EvaluationTotalScore/GetTotalScoreDataByMore/' + Id });
通過”/”的方式,就把參數附帶到url上,看起來簡單整潔。對於這個預設的路由你只能傳遞一個參數,而且必須把參數名命名為Id 。
在Controller裡,通過Action方法的參數接收:
public JsonResult GetTotalScoreDataByMore(string Id) { }
主要內容
$.ajax({ type: "POST", async: false, url: "/InviteBid/UpdateTrueScore", contentType: "application/json", //必須有,表示提交的資料類型 data: JSON.stringify({ "BidJudgeViewModel": [{ 'BidRecordId': BidProId, 'JudgeId': editingId, 'TrueScore': score }] }), success: function (result) { $.messager.alert("提示", "恭喜您,修改成功!", "info"); }, error: function (data) { $.messager.alert("提示", "對不起,修改失敗,請稍後再試!", "warning"); return; } });
if (document.getElementById(selRow[i].JudgeId)!=null) { if (document.getElementById(selRow[i].JudgeId).checked) { var checkRow = selRow[i]; //執行個體化一個評分項目對象 var JudgeItemViewModel = { JudgeId: checkRow.JudgeId, JudgeItemName: checkRow.JudgeItemName, JudgeItemContent: checkRow.JudgeItemContent, Requirement: checkRow.Requirement, Score: checkRow.Score }; //在數組中添加對象 arrayJudgeItems.push(JudgeItemViewModel); } } } //提交資料 $.ajax({ type: "POST", async: false, url: "/InviteBid/AddBidJudgeItem", contentType: "application/json", //必須有,表示提交的資料類型 data: JSON.stringify(arrayJudgeItems), success: function (result) { $.messager.alert("提示", "恭喜您,您的選擇儲存成功!", "info"); }, error: function (data) { $.messager.alert("提示", "對不起,您的選擇儲存失敗,請稍後再試!", "warning"); return; } });
傳遞多行資料時,即利用對象數組,然後同樣地,通過Json.stringify來序列化。
在Controller中接收時,方法一樣,要注意參數中List集合中元素的類型名稱和View中對象的名稱一致,如本例中都叫JudgeItemViewModel:
public void AddBidJudgeItem(List<JudgeItemViewModel> JudgeItemViewModel) { }
總結
JSON對象有兩個方法:stringify()和parse()。在最簡單的情況下,這兩個方法分別用於把JavaScript對象序列化為JSON字串和把JSON字串解析為原生JavaScript。利用stringify()方法傳遞對象或對象集合,更好地體現資料的封裝性,很實用。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。