Asp.net MVC area间重定向的几个问题

今天调试多area程序不同area间的相互跳转,发现几个问题

1. 开始的时候使用RedirectToAction方法:return RedirectToAction("actionName", "controllerName", new { area = "areaName" });

成功跳转

2. 后来觉得这种方法有可能产生歧义,改成了另一个方法:return RedirectToRoute("areaRouteName");明确指明了要用哪个Routing

报错找不到页面,原因是MVC继续把当前Controller的controllerName和actionName应用到新的Routing上,而没有使用注册areaRouteName时指定的默认值。这比较奇怪,只能明确的指明Controller和Action的name: return RedirectToRoute("areaRouteName", new { controller = "controllerName", action="actionName"});

3. 后来又发现一个问题,就是当不同的area里有相同名称的Controller,Action时,即使Url Routing环节找到的正确的area,在找Controller时还是会报告多个Controller重名无法区分。后来想了想,可以理解,因为Url Routing环节和后面找Controller,Action环节是无关的,Routing环节把Url解析为RouteData后就交给后面不管了,而后面找Controller时不关心也无法获得之前的Url或匹配的Routing了。错误提示中解决这个问题的方法是在routes.MapRoute时指定Namespaces。把不同area下Controller的命名空间注册上去,就可以解决Controller重名的问题了。

posted @ 2012-12-13 01:05  JSK  阅读(516)  评论(0编辑  收藏  举报