如何减少MVC区域中的子文件夹数量?

时间:2011-05-31 18:41:03

标签: asp.net-mvc-3 routes directory areas

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

默认情况下,我了解设置如下:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

然后在Application_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();
    }
}