ASP.NETCoreMVC中的ViewBag

admin
admin
2021-06-03
分享:

本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core

ASP.NET Core MVC 中的 ViewBag

在本章节中,我们将讨论使用ViewBag将数据从 Controller 传递到视图。

在此过程中,我们还将讨论ViewDataViewBag之间的区别。

上节课中,我们讨论学习了ViewData。 实际上,ViewBagViewData的包装器。 使用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 对比

  • ViewDataViewBag两者都可以从控制器传递数据到视图
  • ViewBagViewData的包装器
  • 它们都是一个弱类型的视图
  • 使用ViewData,我们使用字符串键来存储和查询ViewData字典中的数据
  • 使用ViewBag,我们使用动态属性来存储和查询数据。
  • 双方的ViewDataViewBag都是在运行时动态解析。
  • 双方的ViewDataViewBag不提供编译时类型检查,因此我们没有得到智能提示。
  • 由于我们没有智能提示,因此编写代码的速度降低,错误拼写的可能性也很高。
  • 我们只会在运行时才会看到这些错误。
  • 出于这个原因,我们通常不使用ViewDataViewBag
  • 将数据从控制器传递到视图的首选方法是使用强类型模型对象。
  • 使用强类型模型对象可创建强类型视图。

文章说明

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权
感谢您对我的支持

关注微信公众号:角落的白板报

公众号:角落的白板报