在ASP.NET MVC中,控制器如何知道要调用哪个视图?

问题描述 投票:0回答:2

这听起来像是一个愚蠢的问题,我是一位经验丰富的程序员,但我是.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>
}
asp.net asp.net-mvc model-view-controller view controller
2个回答
0
投票

搜索位置:

~/Views/{ControllerName}/{ActionName}.cshtml
~/Views/Shared/{ActionName}.cshtml

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.