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重名的问题了。