1

ユーザーが認証されている場合は、ユーザープロファイルを含むモデルを使用して「ホーム」ページに移動したいのですが、そうでない場合は、モデルエラーで同じページをポストバックしたいと考えています。これが私がやったことです:

[HttpPost]
        [AllowAnonymous]
        public ActionResult Index(Login loginViewModel)
        {
            if (ModelState.IsValid)
            {
                IUserProfile userProfile = ValidateUser(loginViewModel);

                if (userProfile != null)
                {
                    FormsAuthentication.RedirectFromLoginPage(loginViewModel.UserName, loginViewModel.RememberMe);
                    // return View(userProfile); This obviously won't work
                }
                else
                {
                    ModelState.AddModelError("InvalidCredentials", "Invalid password. Please try again.");
                }
            }

            return View();
        }

問題は、ビュー モデル ( IUserProfile) をビューに渡す方法です。Home/Index.cshtmlビューを明示的にホームページにリダイレクトしていないためです。方法で行われていFormsAuthentication.RedirectFromLoginPageます。

View(userProfileViewModel)また、呼び出しの後にリターンを呼び出すことはできません。これは、慣例により、コントローラーでFormsAuthentication.RedirectFromLoginPage名前を使用してビューを作成しようとし、ビュー モデルに渡そうとするためです。これは間違っており、次の結果になります。例外。IndexLoginUserProfile

4

3 に答える 3

1

Home コントローラーの Index アクションでモデルを渡す必要があります。

実際、RedirectFromLoginPage は HTTP ステータス コード (302) のみをブラウザに送信し、新しいページにリダイレクトするように指示してから、目的のアクションを呼び出します。ビューモデルを渡す必要があるのは、このアクション(あなたの場合はIndex in Home)です。

于 2012-12-19T08:27:19.390 に答える
0

まず第一に、行動は 1 つのことと 1 つのことだけを行う必要があります... 2 つではありません。Index をログインおよびホームページとして使用したいと考えています。ログイン ロジックをホームページ ロジックから分離してみませんか? ユーザーを認証すると、その時点でホーム/インデックスにリダイレクトされ、ログインに失敗した場合は再度ログインが表示されます。次に、ログイン認証中にユーザー プロファイルを読み込む代わりに、ユーザーをホームページにリダイレクトするときにこれを行います (ここではホームページが私のロジックです)。ページに到達したら、プロファイルをロードし、セッションまたはその他のメカニズムを介して何らかの方法でキャッシュします。

これに加えて、FormsAuthetnication.SetAuthCookie(username, rememberMe)代わりにを使用してみてはいかがでしょうかFormsAuthentication.RedirectFromLoginPage。Cookie が作成されたら、 を呼び出しますreturn RedirectToAction("Index", "Home")。このアクションではHttpContext.Current.User.Identity.Name、ユーザー名を読み取り、それをメソッドに渡してプロファイルをロードするために使用できます。

于 2012-12-21T09:54:36.890 に答える
-1

これを試して

if (Session["SessionName"].ToString() != "Role") { return RedirectToAction("UnAuthorised", "Login"); }

このコードをインデックス ページで使用します

于 2012-12-19T08:55:41.517 に答える