当前位置: 代码迷 >> 综合 >> MVC、C#数据传输
  详细解决方案

MVC、C#数据传输

热度:70   发布时间:2024-02-10 15:48:03.0

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 共享数据(非敏感数据)时使用。