这几天基本上都是交接的一些杂事,没有什么工作任务,就有空来回顾一下MVC。虽然工作中也用到了MVC,但已经被微软的架构师设计的找不到MVC的影子了,可能有别的考虑吧,至今还没研究出来。所以,今天就来回顾一下“原生”的MVC的基本操作,免得回来了以后跟你们聊不到一块~
这篇博客主要是MVC的数据传递中的ViewBag和ViewData。
一、从定义来看
ViewBag
// // 摘要: // 获取动态视图数据字典。 // // 返回结果: // 动态视图数据字典。 [Dynamic] public dynamic ViewBag { get; }ViewBag返回的是dynamic类型,返回动态视图数据字典。而ViewData的返回值类型是ViewDataDictionary,ViewDataDictionary表示一个容器,该容器用于在控制器和视图之间传递数据。
// // 摘要: // 获取或设置视图数据的字典。 // // 返回结果: // 视图数据的字典。 public ViewDataDictionary ViewData { get; set; }二、使用上的区别
(1)ViewBag
Controller中
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { ViewBag.MyParam = "ViewBag传递的参数:"+Request["param"]; return View(); } }在视图中显示
@{ ViewBag.Title = "Index";}在地址栏之后输入手动加入参数,如:http://localhost:50663/home/index/?param=helloWorld,我们可以看到呈现的页面为:@ViewBag.MyParam
(2)ViewData
ViewData的使用与ViewBag类似,只是语法稍有不同。
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { ViewData["str1"] = "ViewData传递的参数:"+Request["str1"]; return View(); } }
视图中
@{ ViewBag.Title = "Index";}效果图如下所示:@ViewData["str1"]
ViewData是一个字典集合,通过key值读取对应的value;ViewBag是动态类型,作用和ViewData一样,都是用来存储信息,有一些不同的是ViewData是object类型,ViewBag是动态类型。