ASP.NETCoreMVC中的ViewBag
admin
2021-06-03本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core
ASP.NET Core MVC 中的 ViewBag
在本章节中,我们将讨论使用ViewBag将数据从 Controller 传递到视图。
在此过程中,我们还将讨论ViewData和ViewBag之间的区别。
上节课中,我们讨论学习了ViewData。 实际上,ViewBag是ViewData的包装器。 使用ViewData,我们使用 string 类型的键名来存储和查询数据。 而使用ViewBag,我们则使用的是动态属性而不是字符串键。
使用ViewBag将数据从控制器传递到视图
我们希望将 HomeController 的 Details()操作方法中的Student模型数据和视图页面的 Title 传递给 Details.cshtml 视图。 因此,修改 HomeController 中的 Details()操作方法,如下所示。 请注意,我们在ViewBag上使用动态属性存储(标题和属性)而不是字符串键:
public ViewResult Details()
{
Student model = _studentRepository.GetStudent(1);
//将PageTitle和Student模型对象存储在ViewBag
//我们正在使用动态属性PageTitle和Student
ViewBag.PageTitle = "Student Details";
ViewBag.Student = model;
return View();
}
在视图中访问 ViewBag
要将 ViewBag 的数据从HomeController的 Details()操作方法传递到视图。
修改 Details.cshtml 视图文件中的代码,如下所示。
请注意,我们使用相同的动态属性 PageTitle 和 Student 来访问 ViewBag 数据。
<html>
<head>
<title></title>
</head>
<body>
<h3>@ViewBag.PageTitle</h3>
<div>
姓名 : @ViewBag.Student.Name
</div>
<div>: @ViewBag.Student.Email</div>
<div>
主修科目 : @ViewBag.Student.Major
</div>
</body>
</html>
ViewData 和 ViewBag 对比
- ViewData和ViewBag两者都可以从控制器传递数据到视图
- ViewBag是ViewData的包装器
- 它们都是一个弱类型的视图
- 使用ViewData,我们使用字符串键来存储和查询ViewData字典中的数据
- 使用ViewBag,我们使用动态属性来存储和查询数据。
- 双方的ViewData和ViewBag都是在运行时动态解析。
- 双方的ViewData和ViewBag不提供编译时类型检查,因此我们没有得到智能提示。
- 由于我们没有智能提示,因此编写代码的速度降低,错误拼写的可能性也很高。
- 我们只会在运行时才会看到这些错误。
- 出于这个原因,我们通常不使用ViewData或ViewBag。
- 将数据从控制器传递到视图的首选方法是使用强类型模型对象。
- 使用强类型模型对象可创建强类型视图。
文章说明
如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权
感谢您对我的支持