如何重定向到MVC3中的其他区域?

时间:2012-11-16 09:45:31

标签: c# asp.net-mvc-3 routing asp.net-mvc-areas asp.net-mvc-3-areas

我目前有3个区域(当我开始工作时会有更多区域):LoginUserAdminGlobal.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网址。

非常感谢任何帮助解决这个问题

1 个答案:

答案 0 :(得分:0)

在routes参数中,您只需设置new {area =“OtherAreaName”}。

修改

哦,我看到你已经尝试过了。我想在AreaRegistration类中正确引用并正确命名了该区域的名称,如下所示?

public class AuthorAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Author";
        }
    }

    // ...
}

您是否还需要身份验证并且您被重定向到登录页面?