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


    前言

      本文主要介绍从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(List<JudgeItemViewModel> JudgeItemViewModel) 
            {
    
            }

    总结

      JSON对象有两个方法:stringify()和parse()。在最简单的情况下。这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript。

    利用stringify()方法传递对象或对象集合,更好地体现数据的封装性。非常有用。

  • 相关阅读:
    图解SSH隧道功能
    su和sudo命令的用法
    Linux下下载百度网盘资料
    WPS Office 2019 for Linux来了
    Linux下的录屏软件Kazam
    用hdparm获取硬盘参数
    百度,你能不能有点节操?
    locate的基本用法
    Java class不分32位和64位
    Web站点抓取工具webhttrack
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7064055.html
Copyright © 2020-2023  润新知