博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net MVC中的ViewData与ViewBag(转)
阅读量:4320 次
发布时间:2019-06-06

本文共 8560 字,大约阅读时间需要 28 分钟。

在Asp.net MVC 3 web应用程序中,我们会用到与,对比一下: 

ViewData ViewBag
它是Key/Value字典集合 它是类型对像
从Asp.net MVC 1 就有了 ASP.NET MVC3 才有
基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework
ViewData比ViewBag快 ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换
有一些类型转换代码 可读性更好

在Controller中使用ViewData:

public ActionResult UsingViewData() {          ViewData["Title"] = " Using ViewData";     ViewData["ProjectName"] = "My Test Project";     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";     ViewData["StartDate"] = new DateTime(2011, 1, 1);     ViewData["TotalPrice"] = 1000;     ViewData["TotalDays"] = 100;     Dictionary
stackholder = new Dictionary
(); stackholder.Add("Client","Mr. Client"); stackholder.Add("Manager","Mr. Joy"); stackholder.Add("Team Leader","Mr.Toy"); stackholder.Add("Sr. developer", "Mr.dojoy"); stackholder.Add("developer", "Mr. nodoy"); ViewData["stackholder"] = stackholder; List
modules = new List
(); modules.Add("Admin module"); modules.Add("ShoppingCart module"); modules.Add("CMS module"); ViewData["modules"] = modules; return View(); }

对应UsingViewData View的cshtml:

@ViewData["Title"]

Project Name : @ViewData["ProjectName"]

ProjectDescription :

"@ViewData["ProjectDescription"]".

Stack Holder :
    @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary
    ) {
  • @stakerholder.Key   : @stakerholder.Value
  • }
Project Details:
module List :
    @foreach ( var module in ViewData["modules"] as List
    ) {
  • @module
  • }
Project StartDate : @ViewData["StartDate"]
Project TotalPrice: @ViewData["TotalPrice"]
Project TotaDays : @ViewData["TotalDays"]

然后是ViewBag:

public ActionResult UsingViewBag() {      ViewBag.Title = " Using ViewBag";     ViewBag.ProjectName = "My Test Project";     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";     ViewBag.StartDate = new DateTime(2011, 1, 1);     ViewBag.TotalPrice = 1000;     ViewBag.TotalDays = 100;     Dictionary
stackholder = new Dictionary
(); stackholder.Add("Client", "Mr. Client"); stackholder.Add("Manager", "Mr. Joy"); stackholder.Add("Team Leader", "Mr.Toy"); stackholder.Add("Sr. developer", "Mr.dojoy"); stackholder.Add("developer", "Mr. nodoy"); ViewBag.stackholder = stackholder; List
modules = new List
(); modules.Add("Admin module"); modules.Add("ShoppingCart module"); modules.Add("CMS module"); ViewBag.modules = modules; return View(); }

对应View UsingViewBag 的cshtml的ViewBag:

@ViewBag.Title

Project Name : @ViewBag.ProjectName

ProjectDescription :

"@ViewBag.ProjectDescription.

Stack Holder :
    @foreach ( var stakerholder in ViewBag.stackholder ) {
  • @stakerholder.Key   : @stakerholder.Value
  • }
Project Details:
module List :
    @foreach ( var module in ViewBag.modules ) {
  • @module
  • }
Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy")
Project TotalPrice: @ViewBag.TotalPrice ₹
Project TotaDays : @ViewBag.TotalDays

后面是在Controller中使用ViewBag:

public ActionResult UsingViewBagInControlAndViewDataInView() {      ViewBag.Title = " Using ViewBag In Control And ViewData In View";     ViewBag.ProjectName = "My Test Project";     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";     ViewBag.StartDate = new DateTime(2011, 1, 1);     ViewBag.TotalPrice = 1000;     ViewBag.TotalDays = 100;     Dictionary
stackholder = new Dictionary
(); stackholder.Add("Client", "Mr. Client"); stackholder.Add("Manager", "Mr. Joy"); stackholder.Add("Team Leader", "Mr.Toy"); stackholder.Add("Sr. developer", "Mr.dojoy"); stackholder.Add("developer", "Mr. nodoy"); ViewBag.stackholder = stackholder; List
modules = new List
(); modules.Add("Admin module"); modules.Add("ShoppingCart module"); modules.Add("CMS module"); ViewBag.modules = modules; return View(); }

在UsingViewBagInControlAndViewDataInView.cshtml中使用ViewData来取值:

@ViewData["Title"]

Project Name : @ViewData["ProjectName"]

ProjectDescription :

"@ViewData["ProjectDescription"]".

Stack Holder :
    @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary
    ) {
  • @stakerholder.Key   : @stakerholder.Value
  • }
Project Details:
module List :
    @foreach ( var module in ViewData["modules"] as List
    ) {
  • @module
  • }
Project StartDate : @ViewData["StartDate"]
Project TotalPrice: @ViewData["TotalPrice"]
Project TotaDays : @ViewData["TotalDays"]

反过来是这样的: 

public ActionResult UsingViewDataInControlAndViewBagInView() {     ViewData["Title"] = " Using ViewData In Control And ViewBag In View";     ViewData["ProjectName"] = "My Test Project";     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";     ViewData["StartDate"] = new DateTime(2011, 1, 1);     ViewData["TotalPrice"] = 1000;     ViewData["TotalDays"] = 100;     Dictionary
stackholder = new Dictionary
(); stackholder.Add("Client", "Mr. Client"); stackholder.Add("Manager", "Mr. Joy"); stackholder.Add("Team Leader", "Mr.Toy"); stackholder.Add("Sr. developer", "Mr.dojoy"); stackholder.Add("developer", "Mr. nodoy"); ViewData["stackholder"] = stackholder; List
modules = new List
(); modules.Add("Admin module"); modules.Add("ShoppingCart module"); modules.Add("CMS module"); ViewData["modules"] = modules; return View(); }

在UsingViewDataInControlAndViewBagInView.cshtml 的View中使用ViewBag来取值:

@ViewBag.Title

Project Name : @ViewBag.ProjectName

ProjectDescription :

"@ViewBag.ProjectDescription.

Stack Holder :
    @foreach ( var stakerholder in ViewBag.stackholder ) {
  • @stakerholder.Key   : @stakerholder.Value
  • }
Project Details:
module List :
    @foreach ( var module in ViewBag.modules ) {
  • @module
  • }
Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy")
Project TotalPrice: @ViewBag.TotalPrice ₹
Project TotaDays : @ViewBag.TotalDays

这样对比看上去会比较清楚一些。在源代码中的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);     } }

具体细节在这儿不深入了,这里只是抛砖引玉。希望对您Asp.net MVC开发有帮助。

 出处:http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html

转载于:https://www.cnblogs.com/nzcblog/p/4046673.html

你可能感兴趣的文章
laravel路由与控制器(资源路由restful)
查看>>
Html5移动端页面自适应布局详解(阿里rem布局)
查看>>
memoize-one在React中的应用
查看>>
SpringBoot整合JDBC数据库操作第二弹-配置基本数据库连接源
查看>>
nginx日志切割脚本
查看>>
ipvsadm添加虚拟服务器报错问题
查看>>
LVS-DR集群搭建脚本
查看>>
Docker拉取的镜像源更改为国内的镜像源
查看>>
LVS健康检查脚本
查看>>
PowerCLI 对vm批量关机
查看>>
拿来即用学PYTHON:序
查看>>
github+jenkins+maven+docker自动化构建部署
查看>>
前端禁止鼠标右键、禁止全选、复制、粘贴
查看>>
六. k8s--ingress学习笔记
查看>>
二. python数组和列表
查看>>
七. k8s--volumes之pv pvc学习笔记
查看>>
八. k8s--configmap学习笔记
查看>>
十. k8s--访问控制 serviceaccount和RBAC 学习笔记
查看>>
九. k8s--statefulset控制器
查看>>
十一. k8s--dashboard部署
查看>>