ASP.NET Core 视图(View)

在ASP.NET Core MVC 应用程序中,没有什么像页面,而且当您在 URL 中指定路径时,它也不包含与页面直接对应的任何内容。在 ASP.NET Core MVC 应用程序中,最接近页面的是视图(View)。

  • 正如您所知,在 ASP.NET MVC 应用程序中,所有传入的浏览器请求都由控制器处理,这些请求被映射到控制器操作。
  • 控制器操作可能会返回视图,也可能会执行其他类型的操作,例如重定向到另一个控制器操作。
  • 在 MVC 框架中,最流行的创建 HTML 的方法是使用 ASP.NET MVC 的 Razor 视图引擎。
  • 要使用此视图引擎,控制器操作将生成 ViewResult 对象,ViewResult 可以包含我们要使用的 Razor 视图的名称。

  • 视图将是文件系统上的一个文件,ViewResult 还可以将模型对象携带到视图中,并且视图可以在创建 HTML 时使用此模型对象。
  • 当 MVC 框架看到您的控制器操作生成 ViewResult 时,框架将在文件系统上找到该视图,执行该视图,该视图生成 HTML,框架将该 HTML 发送回客户端。

实例

现在,让我们举一个简单的例子,通过更改 HomeController Index 方法实现来了解这在我们的应用程序中是如何工作的,如下面的程序所示。

  1. using Microsoft.AspNetCore.Mvc;
  2. using MyFirstCoreWebApp.Models;
  3. namespace MyFirstCoreWebApp.Controllers
  4. {
  5. public class HomeController : Controller
  6. {
  7. public ViewResult Index()
  8. {
  9. var employee = new Employee { ID = 1, Name = "Mark Upston" };
  10. return View();
  11. }
  12. }
  13. }

HomeController 内部,让我们只返回 View() 方法返回的结果,而不是生成 ObjectResultView 方法不返回 ObjectResult。它将创建一个新的 ViewResult,因此我们还将 Index 方法的返回类型更改为 ViewResultView 方法在此不接受某些参数。我们将在没有任何其他参数的情况下调用此方法。让我们保存您的文件并刷新您的浏览器。

这是因为 MVC 框架必须去找到那个视图,但现在没有视图。

  • 默认情况下,C# ASP.NET 项目中的视图是具有 *.cshtml 扩展名的文件,并且视图遵循特定的约定。默认情况下,所有视图都位于项目中的 Views 视图文件夹中。
  • 如果不提供任何其他信息,则 ASP.NET MVC 将派生视图位置和视图文件名。
  • 如果我们需要从 HomeControllerIndex 操作中呈现视图,MVC 框架将首先查找该视图的位置是 Views 文件夹中。
  • 它将进入一个 Home 文件夹,然后查找一个名为 Index.chtml 的文件,文件名以 Index 开头,因为我们正在执行 Index 操作。
  • MVC 框架还将查看共享文件夹和您放置在共享文件夹中的视图,您可以在应用程序中的任何位置使用它们。

为了使视图结果正常工作,让我们在正确的位置创建这个 Index.shtml 文件。因此,在我们的项目中,我们首先需要添加一个包含所有视图的文件夹,并将其称为 views。在 Views 文件夹中,我们将为与 HomeController 关联的视图添加另一个文件夹,并将该文件夹称为 Home。右键单击 Home 文件夹并选择 添加→ 视图,并命名为 index.cshtml

让我们在 index.cshtml 文件中添加以下代码。

  1. <html xmlns = "http://www.w3.org/1999/xhtml">
  2. <head>
  3. <title>Home</title>
  4. </head>
  5. <body>
  6. <h1>Welcome!</h1>
  7. <div>
  8. This message is from the View...
  9. </div>
  10. </body>
  11. </html>

现在可以看到 *.cshtml 文件。它可以包含 HTML 标记,并且我们在该文件中的任何标记都将直接发送到客户端。保存此文件并刷新浏览器。

现在,Home 控制器通过 ViewResult 向客户端呈现了这个视图,以及 index.cshtml 文件中的所有标记,也就是发送给客户端的内容。

让我们回到 HomeControllerView 方法。此 View 方法有两个不同的重载,并将 employee 模型作为参数传递。

  1. using Microsoft.AspNetCore.Mvc;
  2. using MyFirstCoreWebApp.Models;
  3. namespace MyFirstCoreWebApp.Controllers
  4. {
  5. public class HomeController : Controller
  6. {
  7. public ViewResult Index()
  8. {
  9. var employee = new Employee { ID = 1, Name = "Mark Upston" };
  10. return View(employee);
  11. }
  12. }
  13. }

View 方法,它只接受一个模型对象,并将使用默认视图,即 Index。这里我们只想传递模型信息,并在 Index.cshtml 中使用该模型,如下面的程序所示。

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <title>Home</title>
  4. </head>
  5. <body>
  6. <h1>Welcome!</h1>
  7. <div>
  8. @Model.Name
  9. </div>
  10. </body>
  11. </html>

当我们在 Razor 视图中使用 @ 符号时,Razor 查看引擎会将您键入的任何内容视为 C# 表达式。Razor 视图包含一些我们可以在 C# 表达式内部访问的内置成员。模型是最重要的成员之一。当你说 @Model 时,你会得到你从控制器传递到视图中的模型对象。因此,@Model.Name 将在视图中显示员工姓名。

现在让我们保存所有文件。之后,刷新浏览器以查看以下输出。

现在,您可以看到上面截图中的员工姓名。