在学习MVC的过程中,Controller里面向View传递数据很重要,我们在Controller里面讲数据加工以后,传递给View,然后让View将数据在浏览器上显示出来,这样我们就能在浏览器上看见了,但是从Controller向View中传递数据的方式有很多,包括ViewData、ViewBag、TempData、Model等等前面三个都是以弱类型的方式传递数据,最后的一个Model是以强类型的方式传递数据。下面我总结一下在学习的过程中它们传递数据的区别。

我先说一下强类型方式传递数据和弱类型传递数据方式的区别,这仅仅是我自己的理解,对于ViewData、ViewBag、TempData这哥仨来说,以它三个为载体传递数据,不必考虑数据是什么类型的,它们可以接收很多类型的数据,像String、int、List<>等等,这些类型的数据都可以往上面那“哥三个”里面装;而强类型的数据传递方式就不同了,如果model的类型是List<String>,那么这个list里只能装String类型的数据,不能装int或者其它类型的数据。

1、使用ViewData

Controller代码

ViewData["Name"] = "赵大仙";//传递一个字符串类型的数据ViewData["Age"] = 25;//传递一个int类型的数据ViewData["Time"] = DateTime.Now;List<String> list = new List<string>();list.Add("字符串1");list.Add("字符串2");list.Add("字符串3");ViewData["list1"] = list;//传递一个List 

视图中的代码

<div>@ViewData["Name"]@ViewData["Age"]</div><div>@ViewData["Time"]</div><ul>@*使用ViewData传送过来的数据,在遍历的时候需要强制转化一下数据类型*@@foreach (var item in ViewBag.list1){<li>@item     </li>   }</ul>

2、使用ViewBag

Controller中的代码

ViewBag.Name = "赵大仙";//传递一个字符串类型的数据ViewBag.Age = 25;//传递一个int类型的数据ViewBag.Time = System.DateTime.Now;List<String> list = new List<string>();list.Add("字符串1");list.Add("字符串2");list.Add("字符串3");ViewBag.list1 = list;//传递一个List </span>

视图中的代码

<div>@ViewBag.Name@ViewBag.Age</div><div>@ViewBag.Time</div><ul>@*使用ViewData传送过来的数据,在遍历的时候需要强制转化一下数据类型*@@foreach (var item in ViewBag.list1){<li>@item     </li>   }</ul>

ViewData与View的比较

ViewData ViewBag
View是Key/Value字典集合 它是Dynamic类型对象
ViewData在ASP.NET MVC 1就有的 ViewBag在ASP.NET MVC 3才有的
基于ASP.NET 3.5 Framework 基于ASP.NET 4.0 与 .NET  Framwork
ViewData比ViewBag快 ViewBag比ViewData慢
在ViewPage查询数据的时候需要转换为合适的数据类型 在ViewPage查询数据的时候不需要转换为合适的数据类型
有一些类型转换代码 可读性好

3、使用TempData

TempData用来:在一次请求中,同时执行多个Action方法时,在多个Action之间共享数据使用。

主视图的Action代码

public ActionResult Index(){TempData["Ms1"] = "那谁...";return View();}

主视图代码

<body>@*请求PartView方法*@@{Html.RenderAction("PartView");}
</body>

部分视图Action代码

public ActionResult PartView(){ViewData["Ms2"] = TempData["Ms1"] + "借我点钱!"; return PartialView();}

部分视图代码

<table><tr><td>@ViewData["Ms2"]</td></tr>
</table>

4、利用model传递数据

Action中的代码

 public ActionResult Index(){List<String> list = new List<string>();list.Add("字符串1");list.Add("字符串2");list.Add("字符串3");return View(list);}

视图中的代码

@model List<String>
@{Layout = null;
}<!DOCTYPE html><html>
<head><title>Index</title>
</head>
<body><div>@Html.TextBoxFor(a=>a[0])</div> <div>@Html.TextBoxFor(a=>a[1])</div>@Html.TextBoxFor(a=>a[2])
</body>
</html>

5、小结
    上面便是我在学习MVC过程中总结的由Controller向View传递数据的方式,这几种方式各有各的优势和特点,我们应该根据情况用,ViewData虽然传递数据快,但是相比较ViewBag它的可读性不好,而且ViewBag在ViewPage查询数据的时候不需要转换为合适的数据类型;可是ViewBag与ViewData在不同的Action请求中不能传递数据,这时候TempData就出来了;至于Model类型的,特别适合实体类型,比如说由数据库中的表映射成的实体,在View中绑定实体后,就可以随心所欲的将实体中的属性利用Lamda表达式加载出来了。

《MVC》——ViewData、ViewBag、TempData、model相关推荐

  1. ViewData、ViewBag和 TempData

    ViewData.ViewBag和 TempData 首先这三个对象都是在mvc中传递数据的. ViewData的声明和调用(写法) //声明ViewData["www"] = & ...

  2. 【渝粤题库】陕西师范大学201301 《经济法学》作业(高起本、专升本)

    <经济法学>作业 一.名词解释 经济法律关系主体 消费者 经济职责 行政垄断 产品责任 经济法的地位 产品质量责任. 经济法律关系主体 经济职责 行政垄断 经济法律关系的客体 经营者 政府 ...

  3. 《金融学》笔记 第三章 信用、利息和利率

    <金融学>笔记 第三章 信用.利息和利率 前言 在<<金融学>笔记>中开了一个头,现在完善具体细节. 金融范畴篇 第一章 货币的本质 第二章 货币制度 第三章 信用 ...

  4. 《彩虹桥》栏目组花絮拍摄在无锡、广州、深圳火热进行中

    近日,由中广有线互动电视,数字移动电视频道主办,深圳小荧星文化传媒有限公司,浙江花季文化传媒有限公司无锡分公司,广州小明星文化传媒有限公司制作的大型少儿文化节目<彩虹桥>栏目组花絮拍摄在无 ...

  5. MVC中的ViewData、ViewBag和TempData

    一.ViewBag和ViewData的定义 public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; ...

  6. .NET MVC中的ViewData、ViewBag和TempData

    一.ViewBag和ViewData的定义 public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; ...

  7. 《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹

    "灭世者"."疯狂者"."叛逆者"三兄妹: "灭世者"黑卡蒂:卡西欧家族的科技天才,沉默,不爱说话,一对亮闪闪的氪金眼, ...

  8. 沈从文《边城》中的“碾坊”与“渡船”、“车路”与“马路”

    <边城>这部中篇小说讲述的故事十分干净.简单和淳朴(后来拍成了电影版),既没有没有错综复杂的人物关系,也没有狗血的剧情,下面是百科的介绍: 它以20世纪30年代川湘交界的边城小镇茶峒为背景 ...

  9. Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)

    目录 Mendix敏捷开发零基础学习<三> 一. 数据保护机制(Prevention of Delete) 1.业务需求 2.业务分析 3.项目实现 二.Mendix权限(Security ...

最新文章

  1. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
  2. 124页,UC伯克利大学胡戎航博士论文公布:视觉与语言推理的结构化模型
  3. 金蝶kis商贸采购单商品代码_金蝶KIS商贸版流程
  4. double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
  5. 微服务升级_SpringCloud Alibaba工作笔记0004---认识spring gateway理解新一代网关
  6. ubuntu配置fastdfs+Nginx
  7. WPF调用OCX控件
  8. shell初级-----更多结构化命令
  9. 解决办法:一切都正确,Python3执行PyImport_Import()一直返回NULL
  10. flowable 配置自定义表单_SpringBootSecurity学习(03)网页版登录添加自定义登录页面...
  11. ATTCK实战系列一(内网渗透入门)
  12. imp崩溃怎么办_IMP注入时游戏闪退崩溃 - Powered by GTA666 - Powered by GTA666 - Powered by GTA666...
  13. linux python-3.10.4 安装
  14. 阿里云商标智能注册申请图文教程(亲踩坑)
  15. Spring Cloud Alibaba微服务架构实战教程—15最详细的Gateway统一网关
  16. 1080p和1080i
  17. C++知识点(持续更新)
  18. 电脑关闭所有应用的快捷键
  19. 海康威视官方安装包(提供64位安装包)
  20. 594. Longest Harmonious Subsequence

热门文章

  1. UE4 材质制作闪烁心脏起搏效果 学习笔记
  2. 第五次任务之三大抽样分布
  3. 【Node.js-6】consolidate模板引擎集成、router路由介绍
  4. 语音信号处理第三章:
  5. 谷歌浏览器:无法翻译此网页
  6. WPF 实现自定义的笔迹橡皮擦
  7. MIPS 五级流水线
  8. python爬虫:爬取QQ音乐歌曲
  9. 让项目管理理论“落地”——读《IT项目经理成长手记》有感
  10. MongoDB-python操作mongodb