MVC、C#数据传输
开发工具与关键技术:Microsoft Visual Studio C#
作者:萧氏萧然
撰写时间:2020年8月 7日
知识点罗列:
1、 数据请求
AJAX - 向服务器发送请求
向服务器发送请求,我们使用XMLHttpRequest对象的 open() 和 send() 方法:
open(method,url,asyns) 规定请求的类型、URL 以及是否异步处理请求。
参数说明:
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)Asynchronous
send(string):将请求发送到服务器
参数说明:string 仅用于POST请求
一个简单的GET请求:
xhr.open("GET","/Ajax02/getInfor",true)
xhr.send();
一个简单的POST请求:
xhr.open("POST","/Ajax02/getInfor",true)
xhr.send();
如果需要像HTML表单那样POST数据,请使用setRequestHeader()来添加HTTP头然后在 send() 方法中规定您希望发送的数据:
xhr.open("POST","/jQueryAjax/postPersonInfor",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(data); data表单中需要提交的数据(字符串)
setRequestHeader语法:
setRequestHeader(header,value):向请求添加HTTP头。
参数说明:
header: 规定头的名称
value: 规定头的值
AJAX 服务器响应
使用XMLHttpRequest对象的responseText或responseXML属性获取来自服务器的响应
responseText:获得字符串形式的响应数据。
responseXML:获得 XML 形式的响应数据。AJAX onreadystatechange事件
在XMLHttpRequest对象中,readyState属性存有XMLHttpRequest的状态信息,
每当readyState改变时,就会触发onreadystatechange事件。
下面是XMLHttpRequest对象的三个重要属性:
onreadystatechange:存储函数(或函数名),每当readyState属性改变时,就会调用该函数。
readyState:存有XMLHttpRequest的状态。从0到4发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status: 200:"OK" 404: 未找到页面
在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当readyState等于4且status为 200 时,表示响应已就绪:
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200) {
var txt =xhr.responseText;
console.log(txt);
}
}
2、 控制器和视图数据流动
在ASP.NET MVC中,页面间和Controller与View之间主要有以下几种小量数据传值方式, ViewData、 ViewBag、TempData、Session
变量。
上面的这四种方法中,ViewData 和
ViewBag 其实是一回事, ViewBag 其实是对
ViewData 的封装, 其 内部其实是使用 ViewData 实现数据存储的。唯一的不同点是,ViewBag 可以存储动态类型(dynamic)的变量 值, 而 ViewData 只能存储 String Key/Object Value 字典数组。
所以我们可以将这四种方法归为三大类, ViewData 和 ViewBag, TempData, Session。
ViewData与ViewBag的区别
1、ViewData是字典类型,赋值方式以键值对的形式,通过key值读取对应的value,
ViewData[“myName”]。
2、ViewBag是动态类型,使用时直接添加属性赋值点即可 ViewBag.myName。
3、ViewBag和ViewData只在当前Action中有效,等同于View。
4、ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData,ViewBag是对ViewData一个动态封装。
5、ViewData比ViewBag快;ViewBag更方便,在使用数据时不需要类型转换
控制器存入数据 视图提取数据
ViewData["airports"]= airports;
List<S_Airport> airpots = ViewData["airports"];
ViewBag.airports= airports;
List<S_Airport> airpots =ViewBag.airports;
TempData 也是一个 String Key/Object
Value 字典数组。 和 ViewData 与
ViewBag 不同的是其所存储 的数据对象的生命周期。 如果页面发生了跳转(Redirection),ViewBag 和 ViewData 中的值将不复存在, 但是 TempData 中的值依然还在。 换句话讲, ViewBag 和 ViewData 存储的值的生命周期只有在从 Controller 到 View 中, 而 TempData 中的数据不仅在从 Controller 到 View 中有效,在不同的 Action 之 间或者从一个页面跳转到另一页面(Controller to
Controller)后依然有效。但是TempData的生命周期只有一次相比之下Session
Session 也是 ASP.NET MVC 程序传递值的一种方式,但与 TempData 不同,用户的整个会话中 Session 都不会过期。 • Session 在同一用户会话过程中的所有请求中有效,比如,刷新页面。 •
Session 中的值也需要进行类型转换(隐式或显式)和非空检查。
Session 的生命周期是最长的,但是它默认使用的是 Cookies 来存储数据,所以使用的时候必须注意数据
保密的问题
控制器与控制器之间传输数据 也能和视图进行数据交互
保存
取出
综上:TempData 主要用在需要在多个 Actions 或者页面重定向时共享传递数据时使用。
Session 主要用在需要在多个 Controllers,Actions and Views 共享数据(非敏感数据)时使用。