1

私がやろうとしていることを行うためのより良い方法を知っているなら、私に教えてください。

そのため、ユーザーがどのページにいてもログインできるように、レイアウト (別名 MasterPage) にログインしています。(念のため残しておきたいことです)そのため、ログインに成功したら、元のページにリダイレクトしたいと考えています。Request.UrlReferrer.AbsoluteUri を使用して URI を取得し、コントローラー名とアクション名を解析しました。アクション名を含む長い URL 変数は、不明な数の URL 変数です。0 の場合もあれば、多数の場合もあります。そのため、MVC3 はアクション名で渡される変数を好みません。次のようにして、コードの他の部分でこれを回避しました。

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

しかし、私が言ったように、入ってくる変数の数も、変数の名前もわかりません。助言がありますか?

4

2 に答える 2

1

これを行う良い方法を見つけました。既に URI を解析しているので、変数と値を取得して、それらを

RouteValueDictionary queryString = new RouteValueDictionary();

私は次に渡すことができます:

return RedirectToAction(action, queryString);
于 2012-05-21T21:40:15.380 に答える
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 に答える