ViewData(一个字典集合类型):传入的key必须是string类型,可以保存任意对象信息,特点:它只会存在这次的HTTP的要求中而已,并不像session可以将数据带到下一个Http要求。

 
ViewData.Model:由于viewdata在传入的时候属于弱类型,也就是在ViewData里特定键值的类型永远是object通用对象类型,传给view使用之后,还必须通过转型才能进一步使用,不太方便。
eg:
public ActionResult Index(){
var data=GetDataFromDB();
 
ViewData.Model=data;
return View();
 
或者直接return view(data);一样,都是将viewdata.model传给view使用
}
 
当你通过viewdata.Model传递数据到检视页面,在检视页面中可以用@model声明一个该检视页面专属的数据模型型别,声明后就可以在检视页面中取用@Model对象,而@Model对象就会拿控制器里设置好的ViewData.Model数据,并自动转型为@model声明的型别。
 
 
ViewBag(dynamic动态类型:是.NET Framework4.0的新功能): 定义在System.Web.Mvc.ControllerBase抽象类中,优点是可以少输入几个字符:
eg:
ViewData["Message"]="更改此模板即可开始着手进行您的mvc应用程序";
||
ViewBag.Message="更改此模板即可开始着手进行您的mvc应用程序";
 
 
TempData:数据结构与ViewData一样是字典型别,但TempData的类型是TempDataDictionary,不过还有一点不同的地方,在于它的内部是使用Session来保存信息,“Temp”表示暂存,但是保存在TempData中的数据回暂存多久呢?答案是:一次网页要求。
 
一次网页要求:在窗体数据送出到以下Action保存,如果发生数据库新增失败的消息,我们会希望这次送出的数据可以保留到下一页,此时,就会将这个只希望出现一次的消息保存在TempData中,并在下一页进行取用。
eg:在更新数据库时发生失败后,会先将这次收到的Message数据保存到TempData["PostedMessage"]变量里,然后转回到了Create这个Action
[httpPost]
public ActionResult Create(Message msg)
{
if(!UpdateMessageToDB(msg)){
tempData["aaa"]=msg;
return RedirectToAction("Create");
}else{
return RedirectToAction("Index");
}
}
[httpGet]
public ActionResult Create()
{
string data=TempData["aaa"] as Message;
return View(Data);
}
此时重新回到Create动作,数据从tempdata中再次读出,并再次传递到create检视页面,当这次mvc生命周期退出的前一刻,由于mvc会记录tempdata已经被读取过,因此,在这次http要求退出钱就会将TempData["aaa"]删除。
 
一般来说,在action用到TempData来保存数据时,通常会使用RedirectResult或RedirectToRouteResult来当成Action回传类型(Redirect,RedirectToAction,RedirectToRoute辅助方法),如果你的action不是回传这两个的话很可能导致TempData提前消失

ViewData ViewBag TempData的更多相关文章

  1. 【MVC4 之 ViewData ViewBag TempData】

    ViewData (一个字典集合类型):传入的key必须是string类型,可以保存任意对象信息,特点:它只会存在这次的HTTP的要求中而已,并不像session可以将数据带到下一个Http要求. V ...

  2. MVC3中 ViewBag、ViewData和TempData的使用和区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

  3. ViewBag、ViewData和TempData的使用和区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData. MVC3中保留了ViewData的使用. ViewBag 是动态类型(dynamic),ViewData ...

  4. MVC3+中 ViewBag、ViewData和TempData的使用和区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

  5. MVC中 ViewBag、ViewData和TempData区别

    MVC3中 ViewBag.ViewData和TempData的使用和区别 public dynamic ViewBag { get; } public ViewDataDictionary View ...

  6. MVC3中 ViewBag、ViewData和TempData的使用和区别(不是自己写的)

    (网上抄的,并未消化)在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic) ...

  7. MVC3中 ViewBag、ViewData和TempData的使用和区别(转发:汴蓝)

    MVC3中 ViewBag.ViewData和TempData的使用和区别   在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewD ...

  8. ViewBag、ViewData和TempData使用方法、区别与联系

    一.区别与联系 ViewData 和 TempData 都可以传递弱类型数据,区别如下:TempData 只在当前 Action 中有效,生命周期和 View 相同:保存在Session中,Contr ...

  9. MVC3中 ViewBag、ViewData和TempData的使用和区别(转载)

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

随机推荐

  1. hdu 4185 二分图匹配

    题意用1*2的木板覆盖矩阵中的‘#’,(木板要覆盖的只能是‘#’),问最多能用几个木板覆盖 将#抽象为二分图的点,一个木板就是一个匹配,注意最后结果要除以2 Sample Input 1 6 .... ...

  2. 表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)

    转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...

  3. PL/SQL Developer 连接新数据库

    1 2 3

  4. SqlServer2005或2008数据库字典--表结构.sql

    SELECT TOP 100 PERCENT --a.id,       CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,       C ...

  5. hadoop本地库无法加载

    (1)设置环境变量 export HADOOP_HOME=/your/own/hadoop/home  export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME ...

  6. loadrunner关联的感悟:

    首先用URL模式录制脚本: 切换到树模式下: 很容易查看到关联的位置,由此知道产生动态值得请求为nav.pl 但是在html中我们怎么查看关联值在哪里呢: 今天无意中意识到这个问题: 先看树视图脚本:

  7. sublime快捷键-for mac

    打开/前往 按键 解释 ⌘T 前往文件 ⌘⌃P 前往项目 ⌘R 前往方法 ⌘⇧P 命令提示 ⌃G 前往行 ⌃ ` 打开python 控制台 编辑 按键 解释 ⌘L 选择行 (重复按下将下一行加入选择) ...

  8. Bridge 桥模式

    之前一直以为桥是简单地沟通几个不同接口,使之能够按照一定流程工作.但重新查了一下解释,才有新解. 对于同一个产品的不同影响因子,如果使用继承的话,则这些影响因子则会按照M1*M2* ... Mn的数量 ...

  9. 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b

    Count a * b Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  10. java截取图片部分尺寸

    package util; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; i ...