【问题标题】:How to reduce number of sub-folders in MVC Areas?如何减少 MVC 区域中的子文件夹数量?
【发布时间】:2011-05-31 18:41:02
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我将不得不对我的架构进行更多思考,并将其作为一种可能的方式提交。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2014-04-25
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多