在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. Tween动画TranslateAnimation细节介绍

    Tween动画有下面这几种: Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 Transl ...

  2. Codeforces Round #234 (Div. 2) A. Inna and Choose Options

    A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...

  3. [Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决的方法

    Ext.Msg.alert等弹出框在某些安卓手机上,点击确定后不消失. 原因是: 消息框点击确定后有一段css3 transform动画,动画完毕后才会隐藏(display:none). 有些奇葩手机 ...

  4. 【Hibernate步步为营】--单向关联一对一映射

    上篇文章对多对一的关联映射做了具体的分析,它在实现上能够有两种方式,而且这两种方式实现也非常easy,关键是标签<many-to-one>的使用,它分别指明了多端和一端的映射关系.这样的映 ...

  5. MySQL List分区(三)

    具体介绍请看   MySQL分区一 样例:该样例为本人个人学习总结分享

  6. python初始面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  7. Tomcat 初探(一) 简介

    简述 大部分入了 Java 开发这个坑的朋友,都需要把自己的网站发布到 Web 服务器上,相信也听过 Tomcat 的鼎鼎大名.Tomcat 是由 Sun 公司软件架构师詹姆斯·邓肯·戴维森开发的 W ...

  8. 函数与装饰器Python学习(三)

    1.1 文件处理 1.1.1 打开文件过程 在Python中,打开文件,得到文件句柄并赋值给一个变量,默认打开模式就为r f=open(r'a.txt','w',encoding='utf-8') p ...

  9. Error:Execution failed for task ':app:processDebugManifest'. 合并冲突

    1. Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attrib ...

  10. python2中新式类和旧式类的对比【译】

    Classes and instances come in two flavors: old-style (or classic) and new-style. ➤类和实例分为两大类:旧式类和新式类. ...