【问题标题】:In ASP.NET MVC, how does a controller know which view to call?在 ASP.NET MVC 中,控制器如何知道要调用哪个视图?
【发布时间】:2020-02-21 05:07:41
【问题描述】:

这听起来可能是个愚蠢的问题,我是一个相当有经验的程序员,但我是 .NET 和 MVC 的新手。

在我正在学习的一个类中,我们有一个控制器类 (Homecontroller.cs) 我知道在 ActionResult Index() 方法中调用 Return View() 将导致 .NET 使用文件查找“主页”视图索引.cshtml。然而,在这个例子中,我们返回了 View(cars),其中 car 是 Car 类型的一个实例。因此,即使没有“汽车”视图,代码也会返回 Views/Home/index.html。但该类是 Car 类型的模型。因此,如果您在“返回视图”中返回了一种对象类型,ASP.NET 是否会搜索 .chstml 文件以查找该模型类型?或者它仍然只是在寻找 Home/Index.html 因为返回 View 是从 index 方法调用的。简而言之,在下面的代码中,ASP.NET 如何知道要转到 Views/Home/Index.cshtml?我将在下面粘贴相关代码:

控制器/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


【解决方案1】:

搜索地点:

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

【讨论】:

    【解决方案2】:

    ASP.NET MVC 使用称为“视图发现”的过程来将视图与控制器操作相匹配,如下所述:

    https://asp.mvc-tutorial.com/views/view-discovery-connecting-controller-view/

    如果您没有传入要查找的特定视图名称,它将查找与您的控制器操作名称匹配的视图。所以在这种情况下,它将查找 Index.cshtml。

    View() 方法的一种变体采用单个对象(模型)作为参数。在您的示例中,“汽车”变量作为模型传入。

    View() 方法记录在这里: https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.controller.view?view=aspnet-mvc-5.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多