【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 ...
随机推荐
- BAT常问问题总结以及回答(java基础回答一)
java 基础 八种基本数据类型的大小,以及他们的封装类 答:八种数据类型分别是byte(1字节)-128~127.short(2字节)-32768~32767.char(2字节).int(4字节) ...
- Line(扩展欧几里得)
题意:本题给出一个直线,推断是否有整数点在这条直线上: 分析:本题最重要的是在给出的直线是不是平行于坐标轴,即A是不是为0或B是不是为0..此外.本题另一点就是C输入之后要取其相反数,才干进行扩展欧几 ...
- idea 中web项目 用自带tomcat启动问题,
严重: Exception sending context initialized event to listener instance of class com.zenointel.logserve ...
- nyoj--120--校园网络(scc+缩点)
校园网络 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 南阳理工学院共有M个系,分别编号1~M,其中各个系之间达成有一定的协议,如果某系有新软件可用时,该系将允许一些其 ...
- 【BZOJ 2152】 聪聪可可
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2152 [算法] 点分治 [代码] #include<bits/stdc++.h ...
- stm8s103调试注意点
外设时钟的配置,有次ADC就是不工作,查问题查了很久,总是怀疑ADC配置问题,然后利用库函数的例程,发现就可以,最后发现,外设时钟没开启,外设时钟如下配置 CLK->PCKENR1 = 0x00 ...
- 关于背景颜色、TEXT、<b>、<i>、<u>、<br>、< >、<br>、<br>、h1-h6、<span>、<div>、<ol>、<ul>、<a>标签的用法(下载、跳转、锚点)、Img插入的用法
<html> <head> <meta charset="UTF-8"> <title></ ...
- to_string函数(将数字转换成字符串)
一般常用的转换字符串的方法std::stringstream,但是效率较低;目前C ++11提供了std::to_string 效率方面:C风格的sprintf()没有动态分配内存效率最高;std:: ...
- luogu P3391 【模板】文艺平衡树(Splay) 非旋转treap
Code: #include<bits/stdc++.h> using namespace std; void setIO(string s) { string in=s+".i ...
- 按时间划分备份MySQL脚本
按时间划分备份MySQL脚本 #!/bin/bash BASE_PATH=/data/dump/ JIRA_FILE_NAME=ZY798-`date +%Y%m%d%H%M%S`; cd /usr/ ...