前言
本文主要介绍从View(或者js)文件向Controller提交对象或者对象集合。比方。将表格中的一行数据作为一个对象提交。或将多行数据作为一个集合提交到Controller。
回想
从View(或者js)文件向Controller提交数据。你可能见过下面几种方式:
- 将提交的数据附在url地址后面
$.ajax({ type: "POST", url: "/InviteBid/UpdateBidZRecord/?
JudgeBidId="
+ JudgeBidId + "&BidRecordId=" + BidRecordId, success: function (jsonResult) { }, error: function (data) { $.messager.alert("提示", "评标办法提交失败!", "warning"); return; } });
- 利用带參数的路由的写法(默认的路由。传递的參数是Id)
打开client中的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) { }
主要内容
- 从View向Controller传递对象
$.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; } });
- 从View向Controller传递对象集合
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(ListJudgeItemViewModel) { }
总结
JSON对象有两个方法:stringify()和parse()。在最简单的情况下。这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript。
利用stringify()方法传递对象或对象集合,更好地体现数据的封装性。非常有用。