我目前有3个区域(当我开始工作时会有更多区域):Login
,User
和Admin
。 Global.asax
中的默认路由转到登录区域(Login\Index\Index
)中索引控制器的索引操作,该工作正常,这就是我映射的方式:
routes.MapRoute(
"Default", // Route name
"{area}/{controller}/{action}/{id}", // URL with parameters
new { area = "Login", controller = "Index", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new[] { typeof(AppName.Areas.Login.Controllers.IndexController).Namespace }
);
3个区域中的每个区域都在AreaRegistration文件中注册:
context.MapRoute(
"Admin_default",
"{area}/{controller}/{action}/{id}",
new { area = "Admin", controller = "Index", action = "Index", id = UrlParameter.Optional },
new[] { typeof(AppName.Areas.Admin.Controllers.IndexController).Namespace }
);
登录控制器索引操作获取用户登录详细信息,查找用户类型并将其重定向到适当的区域......至少应该这样做。从我可以收集搜索谷歌,重定向到特定区域的正确方法是:
return RedirectToAction("Action", "Controller", new { area = UserType });
似乎不起作用,它只是重定向到Login\Controller\Action
,我无法解决原因。
在我尝试解决发生的事情时,我用过这个:
var url = Url.Action("Action", "Controller", new { area = "Admin" });
生成相同的Login\Controller\Action
网址。
非常感谢任何帮助解决这个问题
答案 0 :(得分:0)
在routes参数中,您只需设置new {area =“OtherAreaName”}。
哦,我看到你已经尝试过了。我想在AreaRegistration类中正确引用并正确命名了该区域的名称,如下所示?
public class AuthorAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Author";
}
}
// ...
}
您是否还需要身份验证并且您被重定向到登录页面?