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)

  打开客户端中的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()方法传递对象或对象集合,更好地体现数据的封装性,很实用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 18:27:47

MVC传递数据-传递对象或对象集合的相关文章

Android剪切板传递数据传递序列化对象数据

一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象.  2. 对象调用的主要方法介绍 在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法

ASP.NET MVC 基础--------数据传递

前言 大家好,我是大成子.之前有朋友去面试,面试官问了一个这样的题:在http://ASP.NET MVC 中视图和控制器之间有哪几种数据传递方式?今天大成子就带大家一起来探讨C(控制器)向V(视图)[前端视图向控制器发送请求传输的数据的方式本次这里不做赘述了,有机会再做分析和分享]传输数据有哪几种方式.(ViewData/ViewBag/TempData/model) ViewData 第一个是ViewData,它用来存储存储String Key/Object的值.它是一个继承自ViewDat

MVC总结--数据传递

View->Controller 1.传统方式,Get方式提交,在Controller中获得客户端请求: string Name = Request["name"]; string Id=Request .QueryString ["id"]; 2.超链接方式 在超链接中传参,改进了原来的<a></a> <%:Html .ActionLink ("链接","Index","Home

通过剪切板传递数据—— 传递一个对象

1.三个类 MainActivity package com.example.app.jianqiebanchuanzhi; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import a

在Activity之间传递数据—传递值对象

传递有两种方式,一种是类继承自Serializable(Java方式,速度较慢),另一种是类继承自Parcelable(Android方式) 继承自Serializable的时候,实现比较简单,类只需书写必须的属性和构造函数.继承自Parcelable的时候,需要实现往目标中写数据等.两种差别在实体类的书写和接收时. 1.      类继承自Serializable MainActivity中的OnCreate方法添加代码: findViewById(R.id.btnStart).setOnCl

MVC 子对象数据传递

1.接受参数 1 public ActionResult Address(User user) 2 { 3 return View(); 4 } 2. User对象类型 1 public class User 2 { 3 public string Name { get; set; } 4 5 /// <summary> 6 /// 子对象(单个) 7 /// </summary> 8 public Address Address { get; set; } 9 10 /// &l

MVC中数据传递 ViewBag的使用

ViewBag MVC3中 ViewBag.ViewData和TempData的使用和区别 在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary). ViewBag和ViewData的区别: ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析.所以在视图中获取它的数据

数据共享和数据传递

数据共享和数据传递是相辅相成的,我们一起来讨论这个问题.首先要说的是共享和传递都是有作用域的.作用域就是起作用的区域,在同一个作用域数据可以共享,超过这个作用域就是跨作用域,就得用到数据传递了. 作用域 ui作用域每一个ui文件缺省都有对应的ui.js.他们作为一个闭合的作用域.ui.js里根据ui文件里组件的id来获取ui对象;不同的ui文件可以定义相同id的组件.在ui.js里定义的变量只能在这个js里访问. page作用域每次调用openPage都会打开一个新的page,这个新的page会

Intent List、对象、集合传递数据相联Parcelable和Comparable类

public class IMMessage implements Parcelable, Comparable<IMMessage> { public static final String IMMESSAGE_KEY = "immessage.key"; public static final String KEY_TIME = "immessage.time"; public static final int SUCCESS = 0; public