この質問は何度も聞かれますが、私はそれが必要な方法ではないと思います。
ホームページにログインフォームを実装しようとしていますが、このフォームは、次のサイトのようにポップアップするセクションにあります:http: //myanimelist.net。
ログインフォームの部分ビューを作成しました。
@model ArtWebShop.Models.customers
@section Validation {
@Scripts.Render("~/bundles/jqueryval")
}
<section id="login">
@using (Html.BeginForm("LoginValidate", "Login", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.ValidationSummary()
<fieldset>
<legend>Login</legend>
@Html.LabelFor(model => model.email)
@Html.TextBoxFor(m => m.email)
@Html.LabelFor(m => m.password)
@Html.PasswordFor(m => m.password)
<input type="submit" value="Login" class="button" />
</fieldset>
}
</section>
これはホームページ(index.cshtml)に表示されます:
<section class="shown">
@Html.Partial("_LoginPartial")
@Html.ValidationSummary(true)
@Html.ValidationSummary()
</section>
部分ビューが正しく表示されます。しかし、今は機能しない部分があります。
フィールドに入力していない場合にログインを押すと、LoginControllerで検証が実行されますが、リダイレクトするとホームページビューにエラーが送信されないようです。
[HttpPost]
public ActionResult LoginValidate(string redirect)
{
if (_unitOfWork.CustomersRepository.CostumerIsValid(Request.Form["email"], Request.Form["password"]))
{
if (!String.IsNullOrEmpty(redirect) || String.Compare(redirect, "none", StringComparison.OrdinalIgnoreCase) == 0)
{
if (redirect != null) Response.Redirect(redirect, true);
}
else
{
return RedirectToAction("index", "Home");
}
}
ModelState.AddModelError("email", "You entered an incorrect email address");
ModelState.AddModelError("password", "You entered an invalid password");
return RedirectToAction("index", "Home");
}
それが私のloginValidationです。何も入力されていないため、エラーはModelStateに追加され、ホームページにリダイレクトされます。ただし、これではエラーは表示されません。リダイレクトしたからだと思いますが、どうすれば解決できますか?