一、使用方法
案例:
public ActionResult Index() { ViewData["num"] = 2; ViewData.Add("num2", 2); ViewBag.myNum = 2; TempData["myNum2"] = 2; Student stu = new Student() { id = "123456", name = "张三", sex = "男" }; return View(stu); }
页面:
@*使用Model赋值,需要引入下面的命名空间*@ @using ViewBag_Data.Models; @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <p> Model赋值 @Model.id @Model.name @Model.sex </p> 我是ViewData:@((int)(ViewData["num"]) + 1) <br /> 我是ViewData方式二:@((int)ViewData["num2"] + 1) <br /> 我是ViewBag:@(ViewBag.myNum + 1) <br /> 我是TempData:@((int)TempData["myNum2"] + 1) <br /> </div> </body> </html>
ViewData和TempData的区别:
public ActionResult Test1() { TempData["num"] = "aaaaa"; ViewData["num"] = "aaaaa"; return RedirectToAction("Test2"); } public ActionResult Test2() { string text1 = TempData["num"] as string; string text2 = ViewData["num"] as string; return View(); }
执行结果:
ViewData的值已经被清空,而TempData没有被清空,这是它们的区别之一,我们可以用TempData在Controller之间传递数据。
1、ViewBag和ViewData的生命周期和Action相同(仅对当前View有效),不能跨越请求,用来给View提供数据
ViewData是使用类似于Dictionary的方式读写:ViewData["uname"]="XXX";
ViewBag是使用dynamic方式进行读写:ViewBag.uname="XXX";
2、TempData是保存在Session中的,在本次请求中把数据放到TempData中,在下次请求的时候可以从TempData中读取数据,在下次请求处理结束后就从Session中销毁了。TempData主要从来给下个请求传递不方便放到url或者cookie中的临时数据使用。