0

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

任何解决此问题的帮助将不胜感激

4

1 回答 1

0

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

编辑

哦,我看到你已经尝试过了。我想该区域的名称在类 AreaRegistration 类中被正确引用和正确命名,像这样?

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

    // ...
}

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

于 2012-11-18T00:53:41.087 回答