【MVC架构】——怎样利用Json在View和Controller之间传递数据
在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之间传递数据的更多相关文章
- 【ASP.NET MVC】View与Controller之间传递数据
1 概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ...
- MVC进阶学习--View和Controller之间的数据传递(二)
1. 使用Request.Form MVC 将页面简单化,与WebForm中的事件机制完全不同,就和普通的html标签表单提交没有任何区别(当然WebForm中的事件机制其实也是表单提交).在表单提交 ...
- MVC进阶学习--View和Controller之间的数据传递(一)
1.使用ViewData ViewData 的是ControllerBase 的一个属性,是一个数据字典类型的,其实现代码如(这段代码来自asp.net MVC开源项目中源码)下: Code 1 ...
- mvc中view与controll之间传递参数时,可以使用url进行传递
mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...
- 5.MVC框架开发(强类型开发,控制器向界面传递数据的几种方法)
界面表单中的表单元素名字和数据库表的字段名相一一映射(需要哪个表的数据就是那个表的模型(Model)) 在View页面中可以指定页面从属于哪个模型 注:以上的关系可以通过MVC的强类型视图开发来解决我 ...
- View 与 Controller 之间的delegate(代理)传值
这个代理传值是经常使用的一种传值方式,下面介绍一种View 和 Controller 之间的代理传值方法. 先建立一个View视图 如 LoginView 是继承于一个UIView 在LoginVie ...
- ASP.NET MVC中如何以ajax的方式在View和Action中传递数据
前言:写这篇随笔的时候,在url上漏写了斜线,找了好久错误,整个人都很不好.#我是猪系列 背景:之前介绍过一篇如何构建 MVC&AJax&JSon示例,这一篇单独讲解如何在View和A ...
- 【MVC框架】——View和Controller之间的传值
在MVC中,Controller运行一个能够说是路由功能.它通过View传过来的数据,来决定应该调用哪一个Model,相同会把Model处理完的数据传给View,所以就总是涉及到Controller和 ...
- ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式
方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...
随机推荐
- OpenLayers学习笔记3——使用jQuery UI美化界面设计
PC端软件在开发是有较多的界面库能够选择,比方DevExpress.BCG.DotNetBar等,能够非常方便快捷的开发出一些炫酷的界面,近期在学习OpenLayers.涉及到web前端开发,在设计界 ...
- 巧用select延时
在LINUX用户态的情况下.假设想要延时的话.用sleep是最合适的,可是,在有些情况下,须要更小单位的延时,ms us 也是要的.用循环获取到的延时是不精确的. 幸好,select函数巧用的话,是 ...
- c10---多文件开发
a.h // // lisi.h // 注意: .h是专门用来被拷贝的, 不会参与编译 #ifndef day05_lisi_h #define day05_lisi_h int sum(int v1 ...
- kentico在使用局域网ip访问的时候提示Missing license或者Invalid website
Missing license Requested URL: http://172.31.212.20/kentico10/ License status: Missing license If yo ...
- c语言循环案例
do while #include <stdio.h> #include <stdlib.h> int main() { int a = 1,b = 10; do { b -= ...
- Caffe C++API 提取任意一张图片的特征系列二----MemoryData
介绍一种更加灵活的方法,用MemoryData层输入数据,可以直接用opencv接口读入我们的图片再添加的网络中. 第一个问题:仍然是工程建立问题,提示卷积层或其他层没有注册,解决方法与上一篇博客一 ...
- c#设计模式(1)
本文摘取自吕震宇的博客园文章,版权归吕震宇仅供个人学习参考.转载请标明原作者吕震宇. 这学期开设设计模式课程,将课件放上来. 课本:<C#设计模式>,电子工业出版社,ISBN 7-5053 ...
- PHP单词表
输出语句printechovar_dumpprint_rprintf变量的操作unset预定义变量$_SERVER$_GET$_POST$_REQUEST$_COOKIE,$_SESSION 会话技术 ...
- hdu 3572 Task Schedule【 最大流 】
求出最大流,再判断是否满流 先不理解为什么要这样建图 后来看了这一篇题解 http://blog.csdn.net/u012350533/article/details/12361003 把0看做源点 ...
- idea--IntelliJ IDEA隐藏不想看到的文件或文件夹
打开IntelliJ IDEA,File -> Settings -> Editor -> File Types 在红框部分加上你想过滤的文件或文件夹名