Asp.net MVC中ViewData与ViewBag的使用方法
来源:互联网 发布:淘宝买gtx1080截图 编辑:程序博客网 时间:2024/05/16 18:47
在做MVC开发时经常会用到ViewData和ViewBag进行传值操作,因为很常用所以在这里总结一下,以方便后来人。
一、ViewBag的使用方法
后台代码:
public ActionResult Index(){ Dictionary<string, string> address = new Dictionary<string, string>(); address.Add("Lng", "12.353535"); address.Add("Lat", "28.262626"); address.Add("Location", "唐宁街十号"); List<string> modules = new List<string>(); modules.Add("Admin module"); modules.Add("Recursive module"); modules.Add("Consistent module"); ViewBag.Name = "蝈蝈"; ViewBag.Age = "18"; ViewBag.Phone = "18233199999"; ViewBag.Address = address; ViewBag.Modules = modules; return View();}
前台代码:
后台用ViewBag存值,前台既可以通过ViewBag取值,也可以通过ViewData取值。使用ViewData取值时,必须将数据转换成合适的类型;使用ViewBag取值时不需要转换数据类型。
@ViewData["Name"]@ViewData["Age"]@ViewData["Phone"]@{ Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;}@if (dict != null){ @dict["Lng"] @dict["Lat"] @dict["Location"]}@{ List<string> list = ViewData["Modules"] as List<string>;}@if (list != null){ @list[0] @list[1] @list[2] }<br/>@ViewBag.Name@ViewBag.Age@ViewBag.Phone@ViewBag.Address@ViewBag.Address["Lng"]@ViewBag.Address["Lat"]@ViewBag.Address["Location"]@ViewBag.Modules@ViewBag.Modules[0]@ViewBag.Modules[1]@ViewBag.Modules[2]
二、ViewData的使用方法
后台代码:
public ActionResult Index(){ Dictionary<string, string> address = new Dictionary<string, string>(); address.Add("Lng", "12.353535"); address.Add("Lat", "28.262626"); address.Add("Location", "唐宁街十号"); List<string> modules = new List<string>(); modules.Add("Admin module"); modules.Add("Recursive module"); modules.Add("Consistent module"); ViewData["Name"] = "蝈蝈"; ViewData["Age"] = "18"; ViewData["Phone"] = "18233199999"; ViewData["Address"]=address; ViewData["Modules"] = modules; return View();}
前台代码:
后台用ViewData存值,前台既可以通过ViewBag取值,也可以通过ViewData取值。使用ViewData取值时,必须将数据转换成合适的类型;使用ViewBag取值时不需要转换数据类型。
@ViewData["Name"]@ViewData["Age"]@ViewData["Phone"]@{ Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;}@if (dict != null){ @dict["Lng"] @dict["Lat"] @dict["Location"]}@{ List<string> list = ViewData["Modules"] as List<string>;}@if (list != null){ @list[0] @list[1] @list[2] }<br/>@ViewBag.Name@ViewBag.Age@ViewBag.Phone@ViewBag.Address@ViewBag.Address["Lng"]@ViewBag.Address["Lat"]@ViewBag.Address["Location"]@ViewBag.Modules@ViewBag.Modules[0]@ViewBag.Modules[1]@ViewBag.Modules[2]
三、两者的定义
ViewBag的定义:
public dynamic ViewBag { get { if (_dynamicViewData == null) { _dynamicViewData = new DynamicViewDataDictionary(() => ViewData); } return _dynamicViewData; } }
ViewData的定义:
public ViewDataDictionary ViewData { get { if (_viewData == null) { SetViewData(new ViewDataDictionary()); } return _viewData; } set { SetViewData(value); } }
通过定义我们可以看出ViewBag是ViewData的动态封装器,相当于在ViewData的基础上进行了封装处理。
四、两者的区别
- ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData[“myName”]
- ViewBag是动态类型,使用时直接通过属性赋值即可,ViewBag.myName
- ViewData和ViewBag只在当前Action中有效,等同于View
ViewData和ViewBag中的值可以互相访问
注意:
1、只有当关键字是有效的C#标识符时,ViewBag才起作用。
例如:如果在ViewData[“Key With Space”]中存放一个值,那么就不能使用ViewBag访问,因为这样根本无法通过编译。
2、动态值不能作为一个参数传递给扩展方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。如果其中任何一个参数是动态的,那么就不会通过编译。
例如:@Html.TextBox(“name”,ViewBag.Name) 就会编译失败。
要使这行代码通过编译有两种方法: @Html.TextBox(“name”,(string)ViewBag.Name) 、@Html.TextBox(“name”,ViewData[“Name”])
五、简单总结
遇到未知的东西不要着急,现在每天有那么多新知识面世,没有人能记住所有的知识点,只要能静下心来认真研究总能学会的,一定要相信自己能行,不要对自己设限。
- Asp.net MVC中ViewData与ViewBag的使用方法
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Windows程序设计-窗口和消息
- Android的Cursor的close方法不调用会不会造成内存泄露
- 超简单!Linux下FTP服务器的安装和配置(基于Ubuntu)
- HDU 5877 Weak Pair (dfs 树状数组 || dfs序 主席树)
- svm+hog 训练,检测手写数字
- Asp.net MVC中ViewData与ViewBag的使用方法
- MySQL半同步复制--RUN_HOOK
- 0-1背包问题
- tomcat+nginx+redis实现均衡负载、session共享(二)
- 损失函数
- HDU -- 6188 Duizi and Shunzi 【思维】
- 33 Three.js的材质THREE.MeshBasicMaterial
- 自定义View实现视差特效
- 校招上机题(收集)