ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag
在上一节我们创建了与Index动作方法对应的Index视图,那么Index动作方法该如何向Index视图传送数据呢?其中一个方法是使用ViewBag(视图包)。让我们试试看。
在Index动作方法中添加一行代码。
public ActionResult Index() { ViewBag.Today = DateTime.Now.ToLongDateString(); return View(); }
Today是我们自己命名的,看起来好像是ViewBag的一个属性,但ViewBag是动态对象,我们无需去事先声明Today。
在Index视图中要显示ViewBag的Today,我们需要添加如下代码。
<body> <h1>MVC留言板</h1> @ViewBag.Today </body>
ASP.NET MVC3版本之后View采用Razor视图引擎,特点是以@符号作为标记-代码的转换字符。简单来说,就是在HTML标记中要写C#代码,在C#代码前加上@符号即可,更复杂的情况我们遇到了再解释。
ViewBag是动态对象,所以没有代码提示,必须手工将“Today”打出来。
运行之后,我们可以就看到Index方法传递给视图的当前系统日期了。
我们甚至可以将留言的内容通过ViewBag传送给Index视图并显示出来。在Index动作方法里我们添加一个ViewBag。
public ActionResult Index() { ViewBag.Today = DateTime.Now.ToLongDateString(); ViewBag.Message = new string[] {"测试数据1", "测试数据2", "测试数据3", "测试数据4", "测试数据5", "测试数据6", "测试数据7", "测试数据8"}; return View(); }
在Index视图中要显示ViewBag.Message字符串数组的内容,我们需要编写更多的代码。
<body> <h1>MVC留言板</h1> @ViewBag.Today @foreach(var s in ViewBag.Message) { <p>@s</p> } </body>
通过一个foreach循环可以获取ViewBag.Message中的所有字符串,注意这里代码和标签的混合使用。
运行之后看到结果。
使用ViewBag传递数据一大弊端在于作为动态数据没有代码提示,必须手写保证正确,不适合复杂对象的传递。如果只是传送一个简单的字符串的话,ViewBag还是很好用的。