MVC-传值
控制器传给视图
1、ViewData
定义:表示一个容器,该容器用于在控制器和视图之间传递数据。他是一个字典。
后台声明:ViewData["User"]=1;
页面访问:@ViewData["User"]
2、ViewBag
定义:dynamic动态类型,它会在程序运行的时候动态解析。
本质:ViewBag其实本质就是ViewData,只是多了层Dynamic控制(导致同名的会覆盖掉。而且viewdata可以访问到viewbage中的数据)。所以,使用何种方式完全取决于你的个人爱好。viewdata比viewbag快
声明周期:ViewBag和ViewData仅针对当前Action中有效,生命周期和view相同。
后台声明:ViewBag.User=1;
页面访问:@ViewBag.User或者@ViewData["User"]
上图中先添加一个viewdadta["User"],然后又添加一个viewbag.User。就会产生一个问题,viewbag.User会覆盖掉viewdadta["User"]
3、TempData
定义:表示仅从一个请求保持到下一个请求的数据集。它也是一个字典。
本质:保存在session中,Controller每次执行请求时,会从session中获取tempdata,而后清空session,获取完tempdata数据,虽然保存在内部字典中。但是字典中每个条目访问一次后就从字典中删除。每个元素
最多只能访问一次,之后删除。(不建议使用,这个webform里面通过session传值有什么区别?)
他可以跨Action传递,比如说,第一个action定义一个TempData,但是他的对应view没有使用它(因为使用了会消失),在打开另外一个view,另外一个view还会访问到这个TempData。
后台声明:TempData["User"]=1;
页面访问:@TempData["User"]
4、return View(new VerifyCodeViewModel());这种更可以表现MVC的特点。
后台声明:return View(new VerifyCodeViewModel());
页面访问:
制定类型 @model WebApplication14.Models.VerifyCodeViewModel
访问模型中的值 @Model.属性
在类型转换的时候,可以再页面上写后台代码声明变量,这样下面要是有多个访问的时候就只需要转化一次。(viewbage是不需要转化的,因为自己会转换,里面用的是反射。所以效率低)
return view也可以指定返回的视图。其实asp.net中的mvc最大的特点就是1:约定俗称,但是也可以用户自己配置修改(约定大于配置)。2:扩展性
总结:
1、ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["myName"]
2、ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
3、ViewBag和ViewData只在当前Action中有效,等同于View
4、TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除
5、ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData
视图传给控制器
表单提交数据给action,会自动模型绑定。
ajax调用 数据格式json action也会自动模型绑定。