首页 > 解决方案 > 这个 ViewBag 设置到 .NET Razor 页面的确切含义是什么?

问题描述

我是.NET的新手(我来自 Java 和 Spring 框架),我对 Razor 页面有以下疑问。

我有一个非常简单的页面,如下所示:

@model Vidly.Models.Customer

@{
    ViewBag.Title = Model.Name;
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@Model.Name</h2>

第一行声明此页面使用的模型对象类型为Vidly.Models.Customer(它包含视图中使用的数据),实际上我通过以下方式访问并显示Vidly.Models.Customer.Name属性的值:

<h2>@Model.Name</h2>

我的疑问与前面代码的这一部分有关:

@{
    ViewBag.Title = Model.Name;
    Layout = "~/Views/Shared/_Layout.cshtml";
}

它到底在做什么?

我认为它正在声明某种对象,其中包含 2 个属性,这些属性表示类似于此视图页面的设置(如果我做错了断言,请纠正我)。

通过这一行,它声明了什么是页面布局:

Layout = "~/Views/Shared/_Layout.cshtml";

但是这条线到底是什么意思:

ViewBag.Title = Model.Name;

什么是ViewBag?这个设置是什么意思?Model.Name 应包含传递的模型对象内的Name属性的值。究竟在做什么?

标签: c#asp.net.netrazor

解决方案


在 ASP.NET MVC 中有三种方式 - ViewData、ViewBag 和 TempData 将数据从控制器传递到视图。

什么是 ViewBag?

  • ViewBag 可用于将数据从控制器传输到视图,主要是临时数据。
  • ViewBag 仅存在于 http 请求中。它将在重定向时被销毁。
  • ViewBag 是 ControllerBase 类的一个属性。

这条线到底是什么意思:

ViewBag.Title = Model.Name;

ViewBag 可以更方便地使用,因为它不需要强制转换。您正在使用 ViewBag 设置标题。由于 ViewBag 派生自 DynamicViewData,这意味着它可以允许使用点表示法创建动态属性@ViewBag.SomeKey = <value or object>

注意:ViewBag 在 Razor 页面中不可用。


推荐阅读