c# - 这个 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属性的值。究竟在做什么?
解决方案
在 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 页面中不可用。
推荐阅读
- javascript - 无法在 iOS 上加载 htmlAudioElement 音频
- bash - 为什么 bash echo 在查找结果中添加新行?
- javascript - CodePen Java Script 编码帮助
- css - CSS:在样式表中引用 3rd 方类
- c# - 如何在没有数据适配器的 c# windows 应用程序中从 oracle 数据库中检索数据
- swift - 来电分机上限
- javascript - 如何操作 javascript 代码以在我的导航栏中拥有三个不相互干扰的不同下拉菜单?
- c# - 如何在 C# 中运行 write-host 并打印出来
- sql - Oracle SQL - 使用时间戳查询 - 慢
- ruby-on-rails - format.js 和 format.json 在同一个 response_to