MVC-传值

控制器传给视图

一、ViewDataweb

定义:表示一个容器,该容器用于在控制器和视图之间传递数据。他是一个字典。ajax

后台声明:ViewData["User"]=1;json

页面访问:@ViewData["User"]session

二、ViewBagmvc

定义:dynamic动态类型,它会在程序运行的时候动态解析。asp.net

本质:ViewBag其实本质就是ViewData,只是多了层Dynamic控制(致使同名的会覆盖掉。并且viewdata能够访问到viewbage中的数据)。因此,使用何种方式彻底取决于你的我的爱好。viewdata比viewbag快spa

声明周期:ViewBag和ViewData仅针对当前Action中有效,生命周期和view相同。.net

后台声明:ViewBag.User=1;orm

页面访问:@ViewBag.User或者@ViewData["User"]blog

上图中先添加一个viewdadta["User"],而后又添加一个viewbag.User。就会产生一个问题,viewbag.User会覆盖掉viewdadta["User"]

三、TempData

定义:表示仅从一个请求保持到下一个请求的数据集。它也是一个字典。

本质:保存在session中,Controller每次执行请求时,会从session中获取tempdata,然后清空session,获取完tempdata数据,虽然保存在内部字典中。可是字典中每一个条目访问一次后就从字典中删除。每一个元素

最多只能访问一次,以后删除。(不建议使用,这个webform里面经过session传值有什么区别?)

他能够跨Action传递,好比说,第一个action定义一个TempData,可是他的对应view没有使用它(由于使用了会消失),在打开另一个view,另一个view还会访问到这个TempData。

后台声明:TempData["User"]=1;

页面访问:@TempData["User"]

四、return View(new VerifyCodeViewModel());这种更能够表现MVC的特色。

后台声明:return View(new VerifyCodeViewModel());

页面访问:

    制定类型 @model WebApplication14.Models.VerifyCodeViewModel

    访问模型中的值 @Model.属性

在类型转换的时候,能够再页面上写后台代码声明变量,这样下面要是有多个访问的时候就只须要转化一次。(viewbage是不须要转化的,由于本身会转换,里面用的是反射。因此效率低)

return view也能够指定返回的视图。其实asp.net中的mvc最大的特色就是1:约定俗称,可是也能够用户本身配置修改(约定大于配置)。2:扩展性

 

 

总结:

一、ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["myName"] 

二、ViewBag是动态类型,使用时直接添加属性赋值便可 ViewBag.myName

三、ViewBag和ViewData只在当前Action中有效,等同于View

四、TempData能够经过转向继续使用,由于它的值保存在Session中。但TempData只能通过一次传递,以后会被系统自动清除

五、ViewData和ViewBag中的值能够互相访问,由于ViewBag的实现中包含了ViewData

视图传给控制器

表单提交数据给action,会自动模型绑定。

ajax调用 数据格式json  action也会自动模型绑定。

相关文章
相关标签/搜索