javascript中创建对象,并序列化为json,通过$.ajax的提交json数据到后台方法,取值为null的问题
使用mvc开发页面,在view中需要提交数据到后台。使用的办法是在javascript中建立一个和参数类相同的类,在javascript赋值,然后序列化为json,通过$.ajax的提交json数据到后台。实际编程中发现参数取值一直为null。
view中的代码:
1 $('#linkSave').click(function () {
2 var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
3 var nodes = treeObj.getCheckedNodes(true);
4 var datas = [];
5 $.each(nodes, function (k, v) {
6 datas.push(v.tid);
7 });
8
9 var tdata = {
10 "RowPrivilegeRelatedData": {
11 "RowPrivilegeID": $("#RowPrivilegeID").val(),
12 "RelatedIDs": datas
13 }
14 }
15
16 $.ajax({
17 type: "POST",
18 url: '@Url.Action("SaveRowPrivilegeByDeptRelatedData", "RowPrivilege")',
19 dataType: 'json',
20 contentType: 'application/json; charset=utf-8',
21 data: JSON.stringify(tdata),
22 success: function (msg) {
23 if (msg.errmsg == "") {
24 $.messager.alert("处理结果", "设置成功!", "Info", function () { window.location.reload(); });
25 }
26 else {
27 $.messager.alert("处理结果", msg.errmsg, "error");
28 }
29 }
30 });
31 });
2 var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
3 var nodes = treeObj.getCheckedNodes(true);
4 var datas = [];
5 $.each(nodes, function (k, v) {
6 datas.push(v.tid);
7 });
8
9 var tdata = {
10 "RowPrivilegeRelatedData": {
11 "RowPrivilegeID": $("#RowPrivilegeID").val(),
12 "RelatedIDs": datas
13 }
14 }
15
16 $.ajax({
17 type: "POST",
18 url: '@Url.Action("SaveRowPrivilegeByDeptRelatedData", "RowPrivilege")',
19 dataType: 'json',
20 contentType: 'application/json; charset=utf-8',
21 data: JSON.stringify(tdata),
22 success: function (msg) {
23 if (msg.errmsg == "") {
24 $.messager.alert("处理结果", "设置成功!", "Info", function () { window.location.reload(); });
25 }
26 else {
27 $.messager.alert("处理结果", msg.errmsg, "error");
28 }
29 }
30 });
31 });
controller中的代码:
1 public ActionResult SaveRowPrivilegeByDeptRelatedData(RowPrivilegeRelatedData data)
2 {
3 string errorMsg = string.Empty;
4 try
5 {
6 new RowPrivilegeHelper().SaveRowPrivilegeRelatedData(data.RowPrivilegeID, "erp_organization_rowprivilege", data.RelatedIDs);
7 }
8 catch (Exception ex)
9 {
10 errorMsg = ex.Message;
11 }
12 return Json(new { errmsg = errorMsg });
13 }
2 {
3 string errorMsg = string.Empty;
4 try
5 {
6 new RowPrivilegeHelper().SaveRowPrivilegeRelatedData(data.RowPrivilegeID, "erp_organization_rowprivilege", data.RelatedIDs);
7 }
8 catch (Exception ex)
9 {
10 errorMsg = ex.Message;
11 }
12 return Json(new { errmsg = errorMsg });
13 }
后来发现,如果参数名命名为rowPrivilegeRelatedData,即可获得前台传过来的数据。
猜测可能是要求参数名需要和前台拼成的json串中的类名相同(可以忽略大小写)才能传值成功。