0

我有一个 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

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

4

1 回答 1

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();
    }
}
于 2011-05-31T18:53:41.317 回答