ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag

时间:2021-08-03 11:32:18

在上一节我们创建了与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方法传递给视图的当前系统日期了。

ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag

我们甚至可以将留言的内容通过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中的所有字符串,注意这里代码和标签的混合使用。

运行之后看到结果。

ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag

使用ViewBag传递数据一大弊端在于作为动态数据没有代码提示,必须手写保证正确,不适合复杂对象的传递。如果只是传送一个简单的字符串的话,ViewBag还是很好用的。