MVC传递Model之TempData、ViewData、ViewBag差别及用途
MVC使用过程中常常会用到TempData、ViewData、ViewBag三种方式,这三种什么差别呢?
TempData:默认存储于Session中,可通过继承ITempDataProvider接口改变。
生命周期:经过一次Controller传递就失效,即View读取一次后相应的TempData即从TempData集合中删除,只是假设TempData未被View读取之前,其值可在Controller之间传递。PS:假设你不想TempData使用后就删除,您能够通过TempData.Peek(“KEY”)来长期保存。假设是仅仅想再保存一次,再读取一次后再删除则要使用TempData.Keep(“KEY”),这样假设再被读取又会再次标记删除。
ViewData:默认存储为Dictionary键值对
生命周期:仅对当前View有效。
ViewBag:不再是以键值对形式存放。它以dynamic类型存放
生命周期:同ViewData一样,仅对当前View有效
PS:ViewBag可看成是对ViewData的封装,只是ViewBag不能够作为扩展方法的參数,由于扩展方法的參数类型必须明白
除了以上三种方式以外,还有ViewModel、PartialView和Tuple
ViewModel:它是基于视图需求的Model,它能够把多个View Model以属性的方式合并到一个View Model中。
长处:
● 把多个model放到一个View Model中
● 有智能提示
● 安全性:Domain Model被隐藏
● 当Domain Model有变化,不须要改动视图非常多。仅仅须要改动相应的View Model就能够
● 在Domain Model和View之间实现了松耦合
PartialView:对于哪些须要反复使用的视图部分,提取出来作为部分视图。
长处:
● 方便反复使用
● 仅仅更新主视图的某个部分
缺点:
● 多过的使用影响可读性
Tuple:.NET 4.0推出的。是一个有序的、不可变的、固定大小的、同意存放多种类型的类。
适合传递一些”小数据”。假设不想在ASP.NET MVC中创建View Model,可用Tuple来替代。
长处:
● 提供了一种不须要创建View Model而传递Model的方式。
缺点:
● 大小被限制:最多仅仅能存放8组数据。
● 值以item1, item2…来传递。非常难确定item1, item2…究竟代表哪组数据。
● 智能提示不理想
样例:
□ HomeController
public ActionResult TupleDemo()
{
var allModels = new Tuple<List<Course>, List<Teacher>, List<Student>>(_repository.GetCourses(),
_repository.GetTeachers(), _repository.GetStudents()) {};
return View(allModels);
}
□ Home/TupleDemo.cshtml
@model Tuple <List <MvcApplication1.Models.Course>, List <MvcApplication1.Models.Teacher>, List <MvcApplication1.Models.Student>>
下拉框遍历课程:
@foreach (var course in Model.Item1)
ajax请求老师课程表和学生上课表:
@Html.Raw(Json.Encode(Model.Item2))
@Html.Raw(Json.Encode(Model.Item3))
● 假设传递的是”小数据”,我们想到ViewBag, ViewData
● 当须要跨controller,跨action传递。我们想到TempData
● 假设基于View的Model,我们想到针对该View设计View Model
● 假设视图的某个部分须要被反复使用,就把之提炼出来。成为一个Partial View
● 假设传递的是”小数据”。又不想使用View Model,能够考虑Tuple
MVC传递Model之TempData、ViewData、ViewBag差别及用途的更多相关文章
- ASP.NET MVC传递Model到视图的多种方式总结
ASP.NET MVC传递Model到视图的多种方式总结 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel T ...
- ASP.NET MVC传递Model到视图的多种方式之通用方式的使用
ASP.NET MVC传递Model到视图的多种方式总结——通用方式的使用 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData Vi ...
- ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
在ASP.NET MVC中,视图数据可以通过ViewBag.ViewData.TempData来访问,其中ViewBag 是动态类型(Dynamic),ViewData 是一个字典型的(Diction ...
- ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用
有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel Tuple 场景: 在视图页面,下拉框选择课程触发事件,分别 ...
- MVC传递Model
@using System.Configuration;@using System.Text.RegularExpressions;@model Model.NewInfo // 指定Module的 ...
- MVC到底使用哪种方式传递Model,在ViewData、ViewBag、PartialView、TempData、ViewModel、Tuple之间取舍
在"MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple"中,体验了使用不同的方式传递多 ...
- MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple
从控制器传递多个Model到视图,可以通过ViewData, ViewBag, PartialView, TempData, ViewModel,Tuple等,本篇逐一体验.本篇源码在github. ...
- MVC ,Action方法传数据给视图有几种方式?--PS:tempData和Viewbag,还有ViewData之间的区别
//---------------------------------控制器向视图传递数据 public ActionResult TransData() { //1.ViewBag ViewBag. ...
- 【MVC4 之 ViewData ViewBag TempData】
ViewData (一个字典集合类型):传入的key必须是string类型,可以保存任意对象信息,特点:它只会存在这次的HTTP的要求中而已,并不像session可以将数据带到下一个Http要求. V ...
随机推荐
- 快速生成json实体类
读取一个json文件,并与实体相对应: static void Main(string[] args) { string json = ""; FileStream fs = ne ...
- 【转】ant命令总结
http://feiyeguohai.iteye.com/blog/1295922 ant命令总结 1 Ant是什么? Apache Ant 是一个基于 Java的生成工具. 生成工具在软件开发中用 ...
- Centos开启FTP及用户配置
vsftpd作为FTP服务器,在Linux系统中是非常常用的.下面我们介绍如何在centos系统上安装vsftp. 什么是vsftpd vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...
- 2D image convolution
在学习cnn的过程中,对convolution的概念真的很是模糊,本来在学习图像处理的过程中,已对convolution有所了解,它与correlation是有不同的,因为convolution = ...
- 探索React生态圈
原文地址:http://www.csdn.net/article/2015-08-04/2825370-react 2004年,对于前端社区来说,是里程碑式的一年.Gmail横空出世,它带来基于前端渲 ...
- hdu 4764 && 2013长春网赛题解
一个组合游戏题. 解答: 从后面往前面推,首先n-1是必胜位,然后前面的k位是必败位,如此循环下去.所以题目就容易了! 代码: #include<cstdio> using namespa ...
- how to develop mobile web
http://blog.templatemonster.com/2010/05/11/how-make-mobile-website-6-easy-tips/ http://mobile.smashi ...
- 怎么清除SVN密码,以及重置eclipse中svn插件密码
如何清除SVN密码,以及重置eclipse中svn插件密码? 清除SVN客户端密码方法: 邮件选择TortoiseSVN中的settings选项---Saved Data---右边会发现有个Authe ...
- Ubuntu 安装基础教程
转自:http://teliute.org/linux/Ubsetup/index.html 1.进入 live cd 桌面 1)设置好启动后,断开网络,然后重启动计算机,可以用硬盘启动,也可以刻成 ...
- 协助ScriptCase7.1做些汉化矫正工作
之前帮助Script.net做了一部分网站的汉化工作,不过我对ScriptCase自己做的网站不满意,对其汉化网站更是不满意. ScriptCase7出来之后,比较让人头疼的就是汉化的问题,较之v6, ...