【问题标题】:ASP.NET MVC How to Set a controller in a Area as a Default controller?ASP.NET MVC 如何将区域中的控制器设置为默认控制器?
【发布时间】:2015-12-05 10:08:58
【问题描述】:

我的应用程序中有一个区域以及默认的 MVC Controllers 文件夹, 这是我的项目结构的样子。

我想从我的区域访问控制器,不带任何前缀,例如 .

localhost/Home --> 应该指向我在 Men Area 中的 HomeController,

localhost/Footware-->应该指向我在 Men Area 中的 FootwareController

并且在我的默认控制器文件夹中,我有与 Men 区域中的控制器同名的控制器,所以我想访问默认控制器 商店前缀 例如:

localhost/store/Home --> 应该从默认选择 HomeController 控制器页面。

localhost/store/Jeans --> 应该从默认选择 JeansControllers 控制器页面。

我所在地区的路线配置是:

public class MenAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Men";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Men_default",
                "Men/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

应用程序的路由配置是:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

Global.asax.cs 是

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);

            RouteConfig.RegisterRoutes(RouteTable.Routes);

    }

问候,

【问题讨论】:

  • 有什么理由不为这 2 个商店路线创建一个商店区域,然后在主 web 应用程序中而不是在区域内创建一个家庭和鞋类控制器?
  • @Glitch100 已经开发了如此多的代码,对其进行任何更改都会破坏应用程序,而我在这里展示的只是一个框架代码,并不能完全代表我的应用程序。

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-areas


【解决方案1】:

据我了解,.MapRoute 不允许您指定区域 *但是可以更改 MVC6 中的 DataToken *,否则会非常简单,但是返回的路线可以更改为有面积。

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        ).DataTokens = new RouteValueDictionary(new { area = "Men" });

可以在 MVC6 中更改 DataTokens

另外你需要确保先注册你的区域,所以不要更改Application_StartGlobal.ascx.cs 中的顺序。这需要首先:

AreaRegistration.RegisterAllAreas();

另一种方法是覆盖我在某处的答案中看到的视图引擎,但看起来有点复杂。

类似问题: ASP.NET MVC How to Set a controller in a Area as a Default controller?


进一步阅读

Walkthrough: Organizing an ASP.NET MVC Application using Areas

Attribute Routing in ASP.NET MVC5

The Magic of MVC Routing with multiple Areas

【讨论】:

  • 仅供参考,在 MVC 6 中,您现在可以在设置路由时设置 DataTokens 而无需采取此类措施。
猜你喜欢
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2011-02-08
  • 1970-01-01
  • 2013-01-03
  • 2013-08-30
相关资源
最近更新 更多