Asp.net mvc 3 如何减少MVC区域中的子文件夹数量?

Asp.net mvc 3 如何减少MVC区域中的子文件夹数量?,asp.net-mvc-3,routes,directory,areas,Asp.net Mvc 3,Routes,Directory,Areas,我有一个asp.net MVC3应用程序,我正在使用区域 默认情况下,我理解设置如下所示: Areas\ Orders\ Controllers\ HomeController.cs (Action method: Index) OrderController.cs (Action method: OrderIndex) TransferController.cs (Action method: T

我有一个asp.net MVC3应用程序,我正在使用区域

默认情况下,我理解设置如下所示:

Areas\
   Orders\
       Controllers\
           HomeController.cs     (Action method: Index)
           OrderController.cs   (Action method: OrderIndex)
           TransferController.cs (Action method: TransferIndex)
       Views\
           Home\
               Index.aspx
           Order\
               OrderIndex.aspx
           Transfer\
               TransferIndex.aspx
Areas\
   Orders\
       Controllers\
           OrderController.cs   (Action method: Index, OrderIndex, TransferIndex)
       Views\
           Index.aspx
           OrderIndex.aspx
           TransferIndex.aspx
我想做的是简单地计算文件夹的数量,以便执行以下操作:

Areas\
   Orders\
       Controllers\
           HomeController.cs     (Action method: Index)
           OrderController.cs   (Action method: OrderIndex)
           TransferController.cs (Action method: TransferIndex)
       Views\
           Home\
               Index.aspx
           Order\
               OrderIndex.aspx
           Transfer\
               TransferIndex.aspx
Areas\
   Orders\
       Controllers\
           OrderController.cs   (Action method: Index, OrderIndex, TransferIndex)
       Views\
           Index.aspx
           OrderIndex.aspx
           TransferIndex.aspx

这可能吗?这是路由设置吗?

您可以编写自定义视图引擎。我将提供Razor的一个示例:

public class MyViewEngine : RazorViewEngine
{
    public MyViewEngine()
    {
        base.AreaViewLocationFormats = base.AreaViewLocationFormats.Union(new[] 
        {
            "~/Areas/{2}/Views/{1}{0}.cshtml"    
        }).ToArray();
    }
}
然后在
应用程序\u Start
中注册此视图引擎:

ViewEngines.Engines.Add(new MyViewEngine());
而这几乎就是你所需要的,以实现你所期待的

当然,如果您使用的是WebForms视图引擎,则需要进行轻微的调整:

public class MyViewEngine : WebFormViewEngine
{
    public MyViewEngine()
    {
        base.AreaViewLocationFormats = base.AreaViewLocationFormats.Union(new[] 
        {
            "~/Areas/{2}/Views/{1}{0}.aspx"
        }).ToArray();
    }
}

非常感谢。我将不得不对我的体系结构进行更多的思考,并将此作为一种可行的方式归档。