MVC传递数据-传递对象或对象集合

来源:互联网 发布:焊接机器人编程 编辑:程序博客网 时间:2024/06/08 06:03

前言

  本文主要介绍从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)

  打开客户端中的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(List<JudgeItemViewModel> JudgeItemViewModel)         {        }

总结

  JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript。利用stringify()方法传递对象或对象集合,更好地体现数据的封装性,很实用。

1 0
原创粉丝点击