【问题标题】:What is the exact meaning of this ViewBag setting into a .NET Razor page?这个 ViewBag 设置到 .NET Razor 页面的确切含义是什么?
【发布时间】:2019-03-25 19:19:27
【问题描述】:

我是 .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 属性的值。到底在做什么?

【问题讨论】:

  • 找到 _Layout.cshtml 并查看 head 标签中的内容。可能是它使用视图包来设置页面标题
  • 什么是view bag也被回答了很多次stackoverflow.com/questions/34209201/what-is-inside-viewbag
  • 一般用于在控制器和视图之间传递少量数据
  • 顺便说一句,由于没有一个答案解决了这个问题,语法 @{ ... Stuff here... } 没有定义一个对象,而是一段 c# 代码。您可以定义变量、设置属性、调用方法等,而不必在每一行前面加上 Razor @ (实际上,有些事情您不能没有这种语法,例如声明或分配变量)跨度>

标签: c# asp.net .net razor


【解决方案1】:

一般来说,它用于在控制器和视图之间传递少量数据。

在上面的例子中,它最有可能设置页面的title,通常在_Layout.cshtml

<title>My Page - @ViewBag.Title</title> 

【讨论】:

    【解决方案2】:

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

    什么是 ViewBag?

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

    这行到底是什么意思:

    ViewBag.Title = Model.Name;
    

    ViewBag 使用起来更方便,因为它不需要强制转换。您正在使用 ViewBag 设置标题。由于 ViewBag 派生自 DynamicViewData,这意味着它可以允许使用点符号 @ViewBag.SomeKey = &lt;value or object&gt; 创建动态属性。

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

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 2011-05-06
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多