ASP.NET Core - 视图

在ASP.NET Core MVC应用程序中,没有任何内容类似于页面,并且当您在URL中指定路径时,它也不包含与页面直接对应的任何内容.最接近ASP.NET Core MVC应用程序中页面的内容称为视图.

  • 如您所知在ASP.NET MVC应用程序中,所有传入的浏览器请求都由控制器处理,这些请求将映射到控制器操作.

  • 控制器操作可能会返回查看或者它也可能执行某些其他类型的操作,例如重定向到另一个控制器操作.

  • 使用MVC框架,最流行的创建HTML的方法是使用ASP.NET MVC的Razor视图引擎.

  • 要使用此视图引擎,控制器操作会生成 ViewResult 对象,ViewResult可以带有我们想要使用的Razor视图的名称.

View Result

  • 视图将是文件系统和ViewResult上的文件也可以携带模型对象视图和视图可以在创建HTML时使用此模型对象.

  • 当MVC框架看到您的控制器操作产生ViewResult时,框架将在文件系统上找到视图,执行生成HTML的视图,框架将该HTML发送回客户端.

示例

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

using FirstAppDemo.Models; 
using Microsoft.AspNet.Mvc; 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppdemo.Controllers { 
   public class HomeController : Controller { 
      public ViewResult Index() { 
         var employee = new Employee { ID = 1, Name = "Mark Upston"}; 
         return View(); 
      } 
   } 
}

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

对象结果

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

  • 默认情况下,C#ASP.NET项目中的视图是具有* .cshtml扩展名且视图遵循特定约定的文件.默认情况下,所有视图都位于项目的Views文件夹中.

  • 视图位置和视图文件名将由ASP.NET MVC派生,如果您不要给它任何额外的信息.

  • 如果我们需要从HomeController的Index动作渲染一个视图,那么MVC框架的第一个位置查看该视图位于Views文件夹中.

  • 它将进入Home文件夹,然后查找名为Index.cshtml&minus的文件;文件名以Index开头,因为我们处于Index操作中.

  • MVC框架还将查找您放置在共享文件夹中的共享文件夹和视图文件夹,您可以在应用程序的任何位置使用它们.

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

选择添加新项目

在左侧窗格中,选择MVC视图页面并在名称字段中输入 index.cshtml ,然后单击添加按钮.

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

<html xmlns = "http://www.w3.org/1999/xhtml"> 
   <head> 
      <title>Home</title> 
   </head>

   <body> 
      <h1>Welcome!</h1> 
      
      <div> 
         This message is from the View...  
      </div> 
   </body> 

</html>

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

CSHTML File

现在,Home控制器通过ViewResult将此视图呈现给客户端以及该index.cshtml文件中的所有标记,即发送给客户端的标记.

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

using FirstAppDemo.Models; 
using Microsoft.AspNet.Mvc; 

using System; 
using System.Collections.Generic; 
using System.Linq;
using System.Threading.Tasks;  

namespace FirstAppdemo.Controllers { 
   public class HomeController : Controller { 
      public ViewResult Index() { 
         var employee = new Employee { ID = 1, Name = "Mark Upston"}; 
         return View(employee); 
      } 
   } 
}

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

<html xmlns = "http://www.w3.org/1999/xhtml"> 
   <head> 
      <title>Home</title> 
   </head> 
   
   <body> 
      <h1>Welcome!</h1> 
      
      <div> 
         @Model.Name 
      </div> 
   </body> 
</html>

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

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

Welcome Mark Upston

您现在可以在上面的屏幕截图中看到员工姓名.