【问题标题】:RedirectToAction with unknown number of URL variables具有未知数量的 URL 变量的 RedirectToAction
【发布时间】:2012-05-27 01:01:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# asp.net-mvc-3 query-string redirecttoaction


    【解决方案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");
            }
    

    【讨论】:

    • 当我尝试使用重定向时,我收到此错误:以下部分已定义但尚未为布局页面“~/Views/Shared/_Layout.cshtml”呈现
    • 我意识到该错误是由其他原因引起的。您的方法有效,尽管我确实更喜欢解析和使用 RouteValueDictionary 因为它在想要避免重定向到页面时给了我更多的控制权。 (例如,避免重定向回错误页面)
    【解决方案2】:

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

    RouteValueDictionary queryString = new RouteValueDictionary();

    然后我可以传递给:

    return RedirectToAction(action, queryString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2021-04-07
      • 1970-01-01
      相关资源
      最近更新 更多