mvc中的几个数据传递
1、ViewData对象
ViewBagData是一种字典集合数据同时属于视图基类和控制器基类的属性。
实例:
//控制器
public class HomeController:Controller { public ActionResult Index() { ViewData["data"]="Hello asp.net"; return View(); } }
视图:
<h1><%=ViewData["data"]%></h1>
2、动态对象ViewBag
ViewBag是dynamic类型的对象,同事属于视图基类和控制器基类的属性。用法如下:
//控制器代码
public class HomeController:Controller { public ActionResult Index() { ViewBag.data="Hello asp.net"; return View(); } }
<!--视图-->
<h1><%=ViewBag.data%></h1>
本质上,ViewBag是对ViewData数据的包装,,也就是使用ViewData保存数据,可以使用ViewBag读取,使用ViewBag保存的数据,也可以使用ViewData读取,例如
ViewData["data"]的数据,使用ViewBag.data也可以访问。
注意:同一个项目中,一般ViewData和ViewBag只是用一种,不要代码中同同时出现ViewData和ViewBag.
3、跨请求数据传递——TempData
TempData也属于字典类型在编码上于ViewData类似,但是他是完全独立的对对象,它保存的数据域Viewdata互不干扰
用法如下:
//控制器
public class HomeController:Controller { public ActionResult Index() { TempData["data"]="Hello asp.net"; return View(); } }
//视图
<h1><%=TempData["data"]%></h1>
在开发中TempData主要是跨请求传递数据
public class HomeController:Controller { public ActionResult Index() { TempData["data"]="来自Index()的数据"; Response.Redirect("~/Home/Detail"); return View(); } public ActionResult Detail() { return View(); } }
//Detail.aspx视图
<h1><%=TempData["data"]%></h1>
在asp.net mvc系统中,TempData的保存机制实际上是可扩展的,它默认的保存机制是session。虽然TempData的保存机制是session,对于前一次的请求使用Temp
使用的Temp保存的数据,但是如何Temp中的数据被使用过(从视图中输出)接下来的请求将获取不到数据,再一次请求中,如何TempData数据被使用过,就会被清除
如果没有被使用过,那么他保存的时间是Session的生存期。