在MVC架构中,尽管非常多东西和三层非常相似,可是也有非常大的差别。就比方传递数据。在三层架构中,传递数据就仅仅要一层返回,另外一层用同样类型的变量来接收即可了。在MVC中,事实上原理是一样的,Controller中的方法返回Json字符串。然后View来接收。或者反过来,不同的就是这之间须要一个序列化和反序列化的过程。

本文就简介利用Json在View和Controller之间传递数据的一个方面,大致从双方面介绍,一是什么是Json,二是怎样实现。

什么是Json



一、概念

百度百科说:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON採用全然独立于语言的文本格式,可是也使用了类似于C语言家族的习惯。

这些特性使JSON称为理想的数据交换语言。

易于人阅读和编写,同一时候也易于机器解析和生成。

说白了,Json就是实现了不同格式的数据的交换,简单理解就是,Json能够把其它格式的数据转换为字符串。也能够把字符串解析为其它格式数据。这也就实现了所谓的序列化和反序列化的过程。

序列化和反序列化并不仅仅是这一种转换,简单理解能够觉得对象转化成字符串的过程为序列化,字符串解析为对象的过程称为是反序列化。详细在不同语言或平台的使用方法,读者能够自己动手查一查。

二、语法

Json语法是JavaScript对象表示语法的子集,有以下几个特点:

●数据在键值对中

●数据由逗号分隔

●花括号保存对象

●方括号保存数组

比如:

<span style="font-family:KaiTi_GB2312;font-size:18px;">{"people":[
{"name":"Brett","age":"21","sex":"男"},
{"name":"Elliotte","age":"25","sex":"女"},
{"name":"Jason","age":"30","sex":"男"},
]}</span>

“name”:"Brett"称为一个键值对,数据就保存在键值对中;数据与数据之间用逗号分隔开;由代码能够看出,这是三个详细的people对象,三个人构成数组。所以代码中花括号保存对象。方括号保存数组。

三、格式转换

<span style="font-family:KaiTi_GB2312;font-size:18px;">var myObject={"people":[
{"name":"Brett","age":"21","sex":"男"},
{"name":"Elliotte","age":"25","sex":"女"},
{"name":"Jason","age":"30","sex":"男"},
]}</span>

这样就实现了将Json字符串赋给myObject这个变量。

假设要进行改动则myObject.people[0].name="Fiala"这样就对name为Brett这个人的姓名进行了改动,当然改动完毕后还应该转换回Json。以便传输数据,那么就是String
myObjectInJSON = myObject.toJSONString();

怎样实现



一、Controller向View返回

Controller中的方法:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        #region 管理员管理界面分页查询 QueryBy(string strLike)
/// <summary>
/// 管理员管理界面分页查询
/// </summary>
/// <param name="strLike">要查询的内容</param>
/// <returns>Json数据</returns>
public ActionResult QueryBy(string strLike)
{
//详细实现过程,此处省略!!
//将返回的数据序列化为Json格式
var data = new
{
total,
rows = from a in result select new { a.ID, a.AdminID, a.AdminLevel, a.AdminName, a.AdminPassword,a.IsUsed }
}; //返回Json数据
return Json(data, JsonRequestBehavior.AllowGet);
}</span>

界面接收时。会通过表格初始化时的URL属性调用Controller中的详细方法,然后进行解析,并赋值给表格。

二、View向Controller传递数据

<span style="font-family:KaiTi_GB2312;font-size:18px;">$.ajax(
{
url: '/Administrator/Edit',
type: "post",
async: true,
dataType: 'json',
data: { 'AdminName': 'Brett' },
success: function (data) {
if (data == 'true') {
alert("更新成功! ");
} } }
);</span>

这是一种固定格式,URL代表提交的路径。type表示是提交还是获取。在这里是提交。data中才是真正储存的要提交的数据。

总结

现阶段学的东西总感觉模模糊糊的,不能系统的去理解,可能是由于学的时间短,研究的不够深入。可是学习总要经历这么个阶段嘛。文章中仅仅是我自己的理解,假设有不正确的地方还请大家指正。谢谢!

假设有什么更好的看法。希望能跟大家多多交流。

【MVC架构】——怎样利用Json在View和Controller之间传递数据的更多相关文章

  1. 【ASP.NET MVC】View与Controller之间传递数据

    1   概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ...

  2. MVC进阶学习--View和Controller之间的数据传递(二)

    1. 使用Request.Form MVC 将页面简单化,与WebForm中的事件机制完全不同,就和普通的html标签表单提交没有任何区别(当然WebForm中的事件机制其实也是表单提交).在表单提交 ...

  3. MVC进阶学习--View和Controller之间的数据传递(一)

    1.使用ViewData ViewData 的是ControllerBase 的一个属性,是一个数据字典类型的,其实现代码如(这段代码来自asp.net MVC开源项目中源码)下: Code   1  ...

  4. mvc中view与controll之间传递参数时,可以使用url进行传递

    mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...

  5. 5.MVC框架开发(强类型开发,控制器向界面传递数据的几种方法)

    界面表单中的表单元素名字和数据库表的字段名相一一映射(需要哪个表的数据就是那个表的模型(Model)) 在View页面中可以指定页面从属于哪个模型 注:以上的关系可以通过MVC的强类型视图开发来解决我 ...

  6. View 与 Controller 之间的delegate(代理)传值

    这个代理传值是经常使用的一种传值方式,下面介绍一种View 和 Controller 之间的代理传值方法. 先建立一个View视图 如 LoginView 是继承于一个UIView 在LoginVie ...

  7. ASP.NET MVC中如何以ajax的方式在View和Action中传递数据

    前言:写这篇随笔的时候,在url上漏写了斜线,找了好久错误,整个人都很不好.#我是猪系列 背景:之前介绍过一篇如何构建 MVC&AJax&JSon示例,这一篇单独讲解如何在View和A ...

  8. 【MVC框架】——View和Controller之间的传值

    在MVC中,Controller运行一个能够说是路由功能.它通过View传过来的数据,来决定应该调用哪一个Model,相同会把Model处理完的数据传给View,所以就总是涉及到Controller和 ...

  9. ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式

    方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...

随机推荐

  1. getColor()方法过时的替代方法

    Android SDK 升級到 23 之後,getResource.getColor(R.color.color_name) 過時 使用新加入的方法 ContextCompat.getColor(co ...

  2. 三种数据库日期转字符串对照sql server、oracle、mysql(V4.11)

    三种数据库日期转换对照: http://blog.csdn.net/zljjava/article/details/17552741 SQL类型转换函数:cast(type1 as type2) 数据 ...

  3. asp.net web site中reference的version的autoupdate

    https://stackoverflow.com/questions/833924/visual-studio-stop-auto-update-on-references This is vali ...

  4. 这里是指推送通知跟NSNotification有区别:

    1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消 ...

  5. P1233 木棍加工

    P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...

  6. lightoj--1294--Positive Negative Sign(水题,规律)

    Positive Negative Sign Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu ...

  7. Java中Array、List、Set、Map

    一.Java中数组 数组用来存放固定数量的同类元素,声明方法: T[] ref,T ref[],如int[] intAry; int intAry[].推荐用T[]的方式,后一种方式为兼容C++习惯写 ...

  8. 踩坑 Windows 解决pip install出现“由于目标计算机积极拒绝,无法连接”的问题

    解决pip install出现“由于目标计算机积极拒绝,无法连接”的问题   可能是使用某软件自动设置了代理, 所以需要手动的取消代理才可以.   在Intel选项中把所有的代理都给去掉就可以了... ...

  9. v-cli环境的安装

    第一步:node   npm是node的包管理器  yarn 第二步:npm install -g vue-cli或者淘宝镜像                  如果安装失败:在node.js com ...

  10. Android 多线程下载 显示进度 速度

    功能要求:从网络下载一APK应用,显示下载速度.进度,并安装应用. 运行效果图: 工程结构图: 很简单,就一个activity,一个更新UI的线程,一个下载线程加个文件处理类 主要代码: /** *多 ...