如果你知道我想做的更好的方法,请告诉我。
所以,我在我的布局(又名MasterPage)中登录,这样无论用户在哪个页面上,用户都可以登录。 (我想确保这一点)因此,在他们成功登录后,我想将它们重定向回他们所在的页面。我使用Request.UrlReferrer.AbsoluteUri来获取URI并解析出Controller名称和Action名称。一个长的Action名称是未知数量的URL变量,可能是none,可能很多。因此,MVC3不喜欢Action名称中传递的变量。我在代码的其他部分做了这个:
return RedirectToAction("Message", new { msg = "error" });
但是,就像我说的那样,我不知道会有多少变量,也不知道变量的名称。有什么建议吗?
答案 0 :(得分:1)
这是我的登录帖子操作。如果没有这样的网址,它会重定向到用户所在的最后一页或主页
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
这部分是你需要的
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
答案 1 :(得分:1)
我找到了一个很好的方法来做到这一点。由于我已经在解析URI,我可以获取变量和值,然后将它们添加到
RouteValueDictionary queryString = new RouteValueDictionary();
然后我可以传递给:
return RedirectToAction(action, queryString);