C# 从MVC区域重定向将我重定向到顶级操作?
我有以下项目结构。其中我有两个家庭和帐户控制器,一个在测试区域内,另一个在路由级项目中。现在从area登录后,我想重定向area的主索引,但它将我重定向到路由级别的主索引 测试区注册地图路线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",
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给我一分钟,我来举个例子。