本实验演示如何使用弱类型视图模型将数据从控制器传至视图。
弱类型视图模型分为 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>
