Asp.Net MVC控制器 - 动作和视图映射元数据

时间:2012-01-17 13:28:03

标签: asp.net-mvc

在我的ASP.net MVC应用程序中,运行ASPX视图引擎,我有一个具有多种操作方法的控制器。对于这些操作方法中的每一个,我注意到我可以分配多个视图,然后在控制器的操作方法中按名称调用每个视图。

我想知道这个映射数据在项目中的存储位置。我扫描了项目文件,发现这些信息无处可寻。如何知道包含多个视图的大型项目在哪里可以找到特定操作的所有视图。我最初认为这将存储在由Visual Studio生成和维护的一些配置文件中。但事实似乎并非如此。那么这些数据存储在哪里呢?在具有多个视图的大型项目中,确定哪些文件真正需要以及哪些文件不是真的将是一场噩梦。

您对此有何看法?

2 个答案:

答案 0 :(得分:4)

圣地亚哥是正确的,ASP.NET MVC是基于约定的,但是当控制器看起来像这样时,要进一步扩展它:

public class FooController : Controller
{
    public ActionResult Bar()
    {
        return View();
    }
}

按照惯例,视图引擎将在以下位置搜索名为Bar的视图:

~/Views/Foo
~/Views/Shared

通过添加新操作而不添加视图很容易看到,您将获得此信息异常屏幕:

The view 'Bar' or its master was not found or no view engine supports the searched 
locations. The following locations were searched:
    ~/Views/Foo/Bar.aspx
    ~/Views/Foo/Bar.ascx
    ~/Views/Shared/Bar.aspx
    ~/Views/Shared/Bar.ascx
    ~/Views/Foo/Bar.cshtml
    ~/Views/Foo/Bar.vbhtml
    ~/Views/Shared/Bar.cshtml
    ~/Views/Shared/Bar.vbhtml

同样,如果您有return View("ViewNameHere"),它会在相同位置查找ViewNameHere

要回答您的问题,即使项目可能有数百个视图并且操作可以返回多个视图,除非您覆盖视图引擎的行为,否则所有视图都根据其控制器进行分组放置在共享文件夹

答案 1 :(得分:3)

asp.net mvc是基于会议的。除非未使用显式视图名称,否则控制器返回的视图将隐含在方法名称中。 如需进一步信息,请访问:asp-net-mvc-views-overview-cs