在ASP.NET Core MVC应用程序中,没有任何内容类似于页面,并且当您在URL中指定路径时,它也不包含与页面直接对应的任何内容.最接近ASP.NET Core MVC应用程序中页面的内容称为视图.
如您所知在ASP.NET MVC应用程序中,所有传入的浏览器请求都由控制器处理,这些请求将映射到控制器操作.
控制器操作可能会返回查看或者它也可能执行某些其他类型的操作,例如重定向到另一个控制器操作.
使用MVC框架,最流行的创建HTML的方法是使用ASP.NET MVC的Razor视图引擎.
要使用此视图引擎,控制器操作会生成 ViewResult 对象,ViewResult可以带有我们想要使用的Razor视图的名称.
视图将是文件系统和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标记,我们在此文件中的任何标记都将直接发送到客户端.保存此文件并刷新浏览器.
现在,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将在视图中显示员工姓名.
现在让我们保存所有文件.在此之后,刷新浏览器以查看以下输出.
您现在可以在上面的屏幕截图中看到员工姓名.