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也会自动模型绑定。

原文地址:https://www.cnblogs.com/wudequn/p/7669128.html