本实验演示如何使用弱类型视图模型将数据从控制器传至视图。
弱类型视图模型分为 ViewData 和 ViewBag 两种。
准备工作
打开 MyWebApp 项目,在 Controllers 文件夹里面添加 TestController.cs:
using Microsoft.AspNetCore.Mvc;
namespace MyWebApp.Controllers
{
public class TestController : Controller
{
// Add actions here ...
}
}
使用 ViewData
在 TestController 里面添加 action。Action 中使用 ViewData 传递数据。
public IActionResult Foo()
{
ViewData["Title"] = "Foo";
ViewData["Header"] = "Header Foo";
ViewData["Items"] = "AAA BBB CCC".Split(' ');
return View();
}
添加视图 Foo.cshtml:
<html>
<head>
<title>@ViewData["Title"]</title>
</head>
<body>
<h1>@ViewData["Header"]</h1>
<ul>
@foreach(var item in (string[])ViewData["Items"]){
<li>@item</li>
}
</ul>
</body>
</html>
因为 ViewData 的数据类型是 object,所以对于复杂数据要使用显式转换,例如 (string[])ViewData["Items"]
。
渲染结果:
<html>
<head>
<title>Foo</title>
</head>
<body>
<h1>Header Foo</h1>
<ul>
<li>AAA</li>
<li>BBB</li>
<li>CCC</li>
</ul>
</body>
</html>
使用 ViewBag
在 TestController 里面添加 action。Action 中使用 ViewBag 传递数据。
public IActionResult Bar()
{
ViewBag.Title = "Bar";
ViewBag.Header = "Header Bar";
ViewBag.Items = "DDD EEE FFF".Split(' ');
return View();
}
添加视图 Bar.cshtml:
<html>
<head>
<title>@ViewBag.Title</title>
</head>
<body>
<h1>@ViewBag.Header</h1>
<ul>
@foreach(var item in (string[])ViewBag.Items){
<li>@item</li>
}
</ul>
</body>
</html>
因为 ViewBag 属性的类型是 dynamic,所以许多时候依然要使用显示转换,例如(string[])ViewBag.Items
。
渲染结果:
<html>
<head>
<title>Bar</title>
</head>
<body>
<h1>Header Bar</h1>
<ul>
<li>DDD</li>
<li>EEE</li>
<li>FFF</li>
</ul>
</body>
</html>