1

我将以此作为开头,如果您知道更好的方法来做我想做的事情,请告诉我。

因此,我在我的布局(又名 MasterPage)中登录,以便用户无论在哪个页面上都可以登录。(我想确定)所以,在他们成功登录后,我想将他们重定向回他们所在的页面。我使用 Request.UrlReferrer.AbsoluteUri 来获取 URI 并解析出 Controller 名称和 Action 名称。带有动作名称的长是未知数量的 URL 变量,可能没有,也可能很多。因此,MVC3 不喜欢在 Action 名称中传递的变量。我在代码的其他部分通过以下方式解决了这个问题:

return RedirectToAction("Message", new { msg = "error" });

但是,就像我说的,我不知道有多少变量会进来,也不知道变量的名称。有什么建议么?

4

2 回答 2

1

这是我的登录后操作。如果不存在这样的 url,它将重定向到用户所在的最后一页或主页

[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");
        }
于 2012-05-20T01:31:19.040 回答
1

我找到了一个很好的方法来做到这一点。由于我已经在解析 URI,因此我可以获取变量和值,然后将它们添加到

RouteValueDictionary queryString = new RouteValueDictionary();

然后我可以传递给:

return RedirectToAction(action, queryString);
于 2012-05-21T21:40:15.380 回答