这听起来像是一个愚蠢的问题,我是一位经验丰富的程序员,但我是.NET和MVC的新手。
[在我正在学习的类中,我们有一个控制器类(Homecontroller.cs),我知道在ActionResult Index()方法中调用Return View()会导致.NET使用文件Index查找“ Home”视图。 .cshtml。但是,在此示例中,我们返回了View(cars),其中car是Car类型的实例。因此,即使没有“汽车”视图,代码也确实会返回到Views / Home / index.html。但是该类是Car类型的模型。因此,如果您在“返回视图”中返回了某种对象,ASP.NET是否会在.chstml文件中搜索该模型类型?还是仍在寻找Home / Index.html,因为正在通过index方法调用return View。简而言之,ASP.NET如何在下面的代码中知道转到Views / Home / Index.cshtml?我将在下面粘贴相关代码:
Controllers / HomeController.cs:
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
var cars = HelloMVC.Models.HelloModel.GetCars();
return View(cars);
}
}
Views / Home / Index.cshtml:
@model List<HelloMVC.Models.HelloModel.Car>
@{
ViewBag.Title = "Index";
}
@foreach (var car in Model)
{
<p>@car.ID - @car.Make - @car.Model</p>
}
搜索位置:
~/Views/{ControllerName}/{ActionName}.cshtml
~/Views/Shared/{ActionName}.cshtml
ASP.NET MVC使用称为“视图发现”的过程来将视图与控制器操作进行匹配,如下所述:
https://asp.mvc-tutorial.com/views/view-discovery-connecting-controller-view/
如果不传递要查找的特定视图名称,它将查找与控制器操作名称匹配的视图。因此,在这种情况下,它将查找Index.cshtml。
View()方法的一个变体采用单个对象(模型)作为参数。在您的示例中,“ cars”变量作为模型传递。
View()方法记录在这里:https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.controller.view?view=aspnet-mvc-5.2