0

私はMVCにまったく慣れていないので、次の方法を理解するのを手伝ってください。ご存知のように、新しい MVC5 プロジェクトを作成するときは、ログインするときにログインページを別のページとして使用する必要があります (つまり、ビューを返すログインコントローラーへの ActionLink を持つ _LoginPartial ビュー)。

私が達成しようとしているのは、サイト全体(ユーザーがまだログインしていないとき)にログインフォームを配置することです。そのため、次の変更を行いました。

_レイアウト ビュー:

@Html.Partial("_LoginPartial")

_Login部分ビュー:

using (Html.BeginForm("Login", "Account", new { ReturnUrl = Request.QueryString["ReturlUrl"] }, FormMethod.Post, new { @class = "navbar-form navbar-right form-inline", role = "form" }))
{
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control input-sm", placeholder = "Username" })
        @Html.PasswordFor(m => m.Password, new { @class = "form-control input-sm", placeholder = "Password" })
    </div>
    <input type="submit" value="Log in" class="btn btn-default btn-sm" />
}

ユーザー名/パスワードが存在する場合は正常に機能しているように見えます.ReturnUrlがQueryStringに見つからない場合、ユーザーをログインさせてホームページにリダイレクトします. ただし、ログインに失敗すると、ログイン コントローラーが完全なビューを返すため、元のログイン ビューを別のページとして読み込みます。

if (ModelState.IsValid)
        {
            var user = await UserManager.FindAsync(model.UserName, model.Password);
            if (user != null)
            {
                await SignInAsync(user, model.RememberMe);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }
// If we got this far, something failed, redisplay form
return View(model);

私はそれをしたくありません。すべてのページにログイン フォームを配置し、どのページからでもログインできるようにして、元のログイン ページにリダイレクトするのではなく、ユーザーが現在表示しているページにエラーを表示したい。javascript/ajaxに頼らずにそれを行うにはどうすればよいですか?

どうもありがとうございました!

4

1 に答える 1