gpt4 book ai didi

asp.net-mvc - MVC/Razor 引擎如何从模型中找到 View ?

转载 作者:行者123 更新时间:2023-12-02 15:30:35 25 4
gpt4 key购买 nike

假设我们有一个 Controller 方法返回一个仅包含模型对象的 ViewResult,那么 MVC 或 Razor 引擎如何继续找到要使用的 View ,只给定 ViewResult?例如

    public ActionResult Index()
{
return View( db.Persons.ToList());
}

编辑:换句话说,一旦此方法返回,所有引擎必须继续的是 ViewResult。它用于查找 View 的任何内容都必须存储在此 ViewResult 中。

它是否使用 cshtml 文件顶部的绑定(bind)?

    @model IEnumerable<Database.Models.Person>

还是使用模型类的字符串名称,通过路由查找?

或者它真的记得哪个 Controller 调用了 View() 方法,并以此为基础?

还是别的?

抱歉,如果这是一个明显的问题。我已经阅读了很多 Stackoverflow 问题和其他页面,但找不到使用哪种方式...我看到很多关于如何将 URL 映射到 Controller 的讨论,但这不是我感兴趣的部分。

最佳答案

这与模型没有任何关系。 ViewEngine 在以下位置搜索 View 。

  • ~/Views/{ControllerName}/{ActionName}.cshtml
  • ~/Views/{ControllerName}/{ActionName}.vbhtml
  • ~/Views/{ControllerName}/{ActionName}.aspx
  • ~/Views/{ControllerName}/{ActionName}.ascx

  • ~/Views/Shared/{ActionName}.cshtml
  • ~/Views/Shared/{ActionName}.vbhtml
  • ~/Views/Shared/{ActionName}.aspx
  • ~/Views/Shared/{ActionName}.ascx

默认情况下,View 名称是 Action 名称,除非您像这样指定 View 名称:

return View(model, "ViewName");

您可以自定义搜索位置。你可以读到那个 here .

更新:

Controller 名称和 Action 名称将存储在RouteData 中。您可以像这样从 RouteData 中检索它们:

var controllerName = RouteData.Values["controller"].ToString();
var actionName = RouteData.Values["action"].ToString();

更新 2:

RouteData 也是 ControllerContext 类的一个属性,ViewEngine 使用它来查找 View 。查看IViewEngine接口(interface)的FindView方法的定义here .

关于asp.net-mvc - MVC/Razor 引擎如何从模型中找到 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com