私は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に頼らずにそれを行うにはどうすればよいですか?
どうもありがとうございました!