如何在MVC中设置默认路由(到区域)

好的,以前已经问过了,但是那里没有固定的解决方案。因此,对于我自己和其他可能会觉得有用的人而言。


在MVC2(ASP.NET)中,我想要它,因此当有人导航到该网站时,会指定一个默认区域。因此,导航至我的网站应该会将您发送到AreaZ中的ControllerX ActionY。


在Global.asax中使用以下路由


routes.MapRoute(

                "Area",

                "",

                new { area = "AreaZ", controller = "ControllerX ", action = "ActionY " }

            );

现在,它的工作方式就像尝试提供正确的页面一样。但是,MVC会在站点的根目录而不是Area文件夹中查找View。


有办法解决吗?


编辑


有一个“解决方案”,在ControllerX中,ActionY返回视图的完整路径。有点破解,但确实可以。但是我希望有更好的解决方案。


         public ActionResult ActionY()

        {

            return View("~/Areas/AreaZ/views/ActionY.aspx");

        }

编辑:


当具有页面的HTML ActionLink时,这也成为一个问题。如果未设置该区域,则动作链接输出为空白。


所有这些是设计还是缺陷?


吃鸡游戏
浏览 1447回答 3
3回答

开满天机

这就是我做的。我不知道为什么MapRoute()不允许您设置区域,但是它确实返回了路由对象,因此您可以继续进行所需的任何其他更改。我之所以使用它,是因为我有一个向企业客户出售的模块化MVC网站,他们需要能够将dll拖放到bin文件夹中以添加新模块。我允许他们在AppSettings配置中更改“ HomeArea”。var route = routes.MapRoute(                "Home_Default",                 "",                 new {controller = "Home", action = "index" },                new[] { "IPC.Web.Core.Controllers" }               );route.DataTokens["area"] = area;编辑:您也可以在AreaRegistration.RegisterArea中尝试默认用户想要的区域。我还没有测试过,但是AreaRegistrationContext.MapRoute确实route.DataTokens["area"] = this.AreaName;为您设置了。context.MapRoute(                    "Home_Default",                     "",                     new {controller = "Home", action = "index" },                    new[] { "IPC.Web.Core.Controllers" }                   );
打开App,查看更多内容
随时随地看视频慕课网APP