Asp.net MVC中ViewData与ViewBag的使用方法(改)
在做MVC开发时经常会用到ViewData和ViewBag进行传值操作,因为很常用所以在这里总结一下,以方便后来人。
Album.cs:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace WebApplication5.Areas.MyArea.Models
- {
- public class Album
- {
- public string Title { get; set; }
- }
- }
一、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的使用方法
//記得引用命名空間
using WebApplication5.Areas.MyArea.Models;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;//類List<Album> alist = new List<Album>();alist.Add(new Album { Title="ViewBag ViewData我的第一次傳值!"});alist.Add(new Album { Title = "ViewBag ViewData我的第二次傳值!" });ViewData["AlbumList"] = alist;return View();
}
@using WebApplication5.Areas.MyArea.Models;//設置自己類的命名空間
@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]<ul> @{ List<Album> alist = ViewBag.AlbumList as List<Album>; if (alist != null) { foreach (var album in alist) { <li> @album.Title;</li> } }
}
</ul>
三、两者的定义
public dynamic ViewBag { get { if (_dynamicViewData == null) { _dynamicViewData = new DynamicViewDataDictionary(() => ViewData); } return _dynamicViewData; }
}
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和TempData
1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任 ...
- mvc中viewdata 和viewbag的区别
ViewData ViewBag 它是Key/Val ...
- 在ASP.NET MVC中加载部分视图的方法及差别
在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- 在ASP.NET MVC中实现Select多选
我们知道,在ASP.NET MVC中实现多选Select的话,使用Html.ListBoxFor或Html.ListBox方法就可以.在实际应用中,到底该如何设计View Model, 控制器如何接收 ...
- ASP.NET MVC中controller和view相互传值的方式
ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...
- [转载]Asp.net MVC中Controller返回值类型
Asp.net MVC中Controller返回值类型 在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须 ...
- ASP.NET MVC教程五:ASP.NET MVC中的路由
一.概述 在ASP.NET MVC架构中,控制器在3大核心构件中处于中心地位,通过控制器支配模型和视图,然而从浏览器发出的请求到控制器还需要路由的协助,路由将特定的请求和控制器的动作对应起来. 在AS ...
- Asp.Net MVC中DropDownListFor的用法(转)
2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T List<T>的第一个 ...
最新文章
- 查看核心交换机CPU时的几个参数~~
- 为什么在旺遍天下生成代码我在线却是离线状态 旺旺在线代码生成
- 【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )
- 组态王中时间存access怎么存,组态王通过Access数据库起始截止日期查询方法
- 移动端适配--flexible.js
- Win10如何设置IE为默认浏览器
- 北大开源分词工具包: 准确率远超THULAC、jieba 分词
- 基于softmax的文本多分类模型代码实现
- Factorization Machines 学习笔记(二)模型方程
- 沃谈小知识|可“防拆”的远程锁机
- 北京大学计算机系 丁主任,北大“扫地僧”韦东奕,真的是正常人吗?北大丁教授说出了答案...
- Nature | 易基因DNA甲基化测序助力人多能干细胞向胚胎全能8细胞的人工诱导
- 小菊花宝宝课堂开课了,教你认识各种形状——用脚本绘图
- ocr移动端名片识别
- 期货现货升跌水(期货下跌现货一定下跌吗)
- (信贷风控七)申请评分卡模型Python实现(图文+代码实现)
- 6824入门坑 go build 错误
- oracle常用语句大全 来自csdn
- dinic 最大流费用流模板
- 拓事件丨腾讯给拓保软件颁奖啦!
热门文章
- JavaSE从头再来(一):面向对象、常用API
- python应用异常解决:sheet.column_dimensions[‘C‘].font=italic24Font无效
- [转载]二十四节气养生大全
- 揭秘3D电影幕后技术——两个摄像机像人眼一样拍
- 如何优雅的从OSM(OpenStreetMap)上获取一个城市的路网?
- 【机器学习】saturate的解释
- CSRF token is incorrect 问题解决
- 数据库设计方法论 - 继承
- 计算机会考在线考试系统,数苑_在线考试平台
- 初等数论四大定理之——费马小定理