C# 从MVC区域重定向将我重定向到顶级操作?

C# 从MVC区域重定向将我重定向到顶级操作?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-areas,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Areas,我有以下项目结构。其中我有两个家庭和帐户控制器,一个在测试区域内,另一个在路由级项目中。现在从area登录后,我想重定向area的主索引,但它将我重定向到路由级别的主索引 测试区注册地图路线 public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Test_default",

我有以下项目结构。其中我有两个家庭和帐户控制器,一个在测试区域内,另一个在路由级项目中。现在从area登录后,我想重定向area的主索引,但它将我重定向到路由级别的主索引

测试区注册地图路线

public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { controller = "Account", action = "Login", id = UrlParameter.Optional },
                namespaces: new[] { "MVCAreaSample.Areas.Test.Controllers" }
            );
        }
基准面地图路线

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional },
                namespaces: new[] { "MVCAreaSample.Controllers" }
            );
区域重定向操作方法

[HttpPost]
        public ActionResult Login(TestModel test)
        {
            var candidateContext = "LoginContext";


            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(2, candidateContext, DateTime.Now, DateTime.Now.AddMinutes(60), true, "Manjay");
            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

            //Check required for code contracts.
            if (System.Web.HttpContext.Current != null)
            {
                System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);

                if (System.Web.HttpContext.Current.Session != null)
                    System.Web.HttpContext.Current.Session["LoginContext"] = candidateContext;
            }


            return RedirectToAction("Index", "Home");
        }
我试着在路线上给区域命名。它在这种情况下起作用。但假设我在这两个层次上都有正确的授权逻辑,而不是

重定向到操作(“索引”,“主页”,新{area=“Test”})


它将为我提供基本级别的登录页面。

您只需确定现有区域路由,并将其作为重定向中的参数传递,如下所示:

var currentArea = RouteData.DataTokens["area"];
return RedirectToAction("Index", "Home", new { area = currentArea });
要返回到某个级别,只需为该区域指定一个空白字符串:

return RedirectToAction("Index", "Home", new { area = "" });

我已经更新了我的问题。如果两个级别都有登录模块,该怎么办。它会将我重定向到上面模块的登录页面。它说非静态字段、方法或属性'System.Web.Mvc.ControllerContext.RouteData.get'@TBAG抱歉,我错过了
在第一行,应该是
RoutData
请重试。这不是问题所在。实际上ViewContext不是一个静态类。因此,我们无法访问RouteData@TBAG给我一分钟,我来举个例子。