为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2019-10-05 14:41:08
好的,以前已经问过了,但是那里没有固定的解决方案。因此,对于我自己和其他可能会觉得有用的人而言。在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时,这也成为一个问题。如果未设置该区域,则动作链接输出为空白。所有这些是设计还是缺陷?
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

这就是我做的。我不知道为什么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" }

                   );


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 1446 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信