开发工具与关键技术:
班级:18级(4)班
撰写时间:2019.5.24
一.在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。
TempData 也是一个 String Key/Object Value 字典数组。 和 ViewData 与 ViewBag 不同的是其所存储 的数据对象的生命周期。 如果页面发生了跳转(Redirection),ViewBag 和 ViewData 中的值将不复存在, 但是 TempData 中的值依然还在。 换句话讲, ViewBag 和 ViewData 存储的值的生命周期只有在从 Controller 到 View 中, 而 TempData 中的数据不仅在从 Controller 到 View 中有效,在不同的 Action 之 间或者从一个页面跳转到另一页面(Controller to Controller)后依然有效。
Session 其实和 ViewData 类似,也是一个 String Key/Object Value 字典数组。但是,Session 是存 储在客户端的 Cookies 中,所以它的生命周期是最长的。 但是,正因为其存储的客户端, 所以必须确保 没有敏感机密的信息存储其中。
二.ViewDataViewData 是一个继承自 ViewDataDictionary 类的 Dictionary 对象。 • ViewData 用来从 Controller 向对应的 View 传递值。 • ViewData 的只在当前当前的请求中有效,生命周期和 View 相同,其值不能在多个请求中共享。 • 在重定向(redirection)后,ViewData 中存储的变量值将变为 null。 • 在取出 ViewData 中的变量值是,必须进行合适的类型转换(隐式或显式)和空值检查。
下面我们来看一个简单的例子,演示一下如何使用 ViewData 来从 Controller 向 View 传值。
然后。我们从视图中获取出这个变量。
执行后,将会在浏览器中看到如下图的结果。
ViewBag 更适合从 Controller 向 View 传递复杂对象数据时使用, 因为取出存储在其中的数据变 量时无需进行类型转换。