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

问题描述

| 我有一个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
这可能吗?这是路由设置吗?     

解决方法

        您可以编写一个自定义视图引擎。我将为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();
    }
}