asp.net mvc如何将视图与控制器操作相关联?

我已经打开了一个示例ASP.NET MVC项目。

HomeController我创建了一个名为MethodA的方法(操作)

public ActionResult MethodA()
{
    return View();
}

我右键单击MethodA并创建了一个名为MethodA1的新视图

重新创建了一个名为MethodA2的新视图。

  • 这个神奇的关系是如何完成的? 我查找了配置文件,告诉编译器, MethodAX与操作MethodA相关,但是没有发现。

  • MethodA被调用时,控制器将返回什么视图?


  • 约定是,如果你没有指定视图名称,相应的视图将是该操作的名称。 所以:

    public ActionResult MethodA()
    {
        return View();
    }
    

    将呈现~/Views/ControllerName/MethodA.cshtml

    但是你也可以指定一个视图名称:

    public ActionResult MethodA()
    {
        return View("FooBar");
    }
    

    现在将呈现~/Views/ControllerName/FooBar.cshtml视图。

    或者,您甚至可以指定不在当前控制器的视图文件夹内的完全限定的视图名称:

    public ActionResult MethodA()
    {
        return View("~/Views/Foo/Baz.cshtml");
    }
    

    显然,所有这些都假定Razor作为视图引擎。 如果您使用的是WebForms,请使用.aspx.ascx替换.cshtml (如果您使用的是partials)。

    例如,如果没有视图,它甚至会告诉你在什么位置以什么顺序查找视图:

    在这里输入图像描述

    记住:ASP.NET MVC完全是关于约定而不是配置。


    MVC框架使用约定而不是配置。 框架调用ViewResult对象上的ExecuteResult(由返回View();)创建。 按照惯例,框架会在多个位置查找以查找视图

    如果您正在使用区域,框架将在以下位置查看视图。

  • /Areas//Views/ControllerName/ViewName.aspx
  • /Areas//Views/ControllerName/ViewName.ascx
  • /Areas//Views/Shared/ViewName.aspx
  • /Areas//Views/Shared/ViewName.ascx
  • /Areas//Views/ControllerName/ViewName.cshtml
  • /Areas//Views/ControllerName/ViewName.vbhtml
  • /Areas//Views/Shared/ViewName.cshtml
  • /Areas//Views/Shared/ViewName.vbhtml
  • 如果没有区域(或者如果您正在使用区域且未找到视图),框架将查看以下位置

  • /Views/ControllerName/ViewName.aspx
  • /Views/ControllerName/ViewName.ascx
  • /Views/Shared/ViewName.aspx
  • /Views/Shared/ViewName.ascx
  • /Views/ControllerName/ViewName.cshtml
  • /Views/ControllerName/ViewName.vbhtml
  • /Views/Shared/ViewName.cshtml
  • /Views/Shared/ViewName.vbhtml
  • 只要框架测试一个位置并找到一个文件,搜索就会停止,并且已经找到的视图用于呈现对客户端的响应。

    有许多重写版本的View方法。 最常见的一种是在框架约定之外渲染一个特定的视图,通过名称来调用它。 例如

    return View("~/Views/AnotherIndex.cshtml");
    

    作为一个有趣的脚注,即使您有特定的视图引擎,该框架也会查找传统的ASP,C#和VB Razor视图(aspx,ascx,cshtml和vbhtml)。


    我正在寻找相同的东西,我只是做了一些测试,然后想通了。 它不会在任何地方保存。 了解它是如何工作的; 只需执行以下步骤:

    在您的控制器中,右键单击,添加视图然后输入不同的视图名称和Ctrl F5,您将在应用程序中获得服务器错误。

    例如,如果您右键单击,在下面的索引操作方法中添加视图,并在视图名称中键入“索引2”,您将看到该错误。

    public class TestController : Controller
    {
        // GET: Test
        public ActionResult Index()
        {
            return View();
        }
    }
    

    所以基本上在动作名称和视图名称之间有一个1-1匹配。 而且你不能为相同的方法添加视图,所以不需要保存在配置文件中。

    现在,将Visual Studio中的视图文件名从Index2.cshtml更改为Index.cshtml,然后按Ctrl + F5。 你应该看到它正在工作。

    链接地址: http://www.djcxy.com/p/30183.html

    上一篇: how does asp.net mvc relate a view to a controller action?

    下一篇: Partial vs Display Template vs Editor Template