過去3日間からこの部分で苦労しています。ログインボタンをクリックすると、モーダルdivにログイン部分ビューをロードする_Layoutページがあります。クライアント側の検証があるかどうかを送信すると、正常に機能し、適切なデータが提供されるまでフォームが送信されません。この問題は、サーバー側の検証が発生したときに発生します。資格情報が無効な場合、同じページにリダイレクトされますが、モーダルは表示されません。ログインボタンをもう一度クリックすると、Invalid Credentials エラーメッセージがモーダルに表示されます。私が試みている方法でこれが可能かどうか、またはこれを達成する他の方法があるかどうかを知りたいです。
これは_Layout Page の一部です:
<a class="btn btn-style btn-success btn-lg btn-wid" data-target="#modal" data-toggle="modal" id="flogin"> Login </a>
フッターの下の同じページのモーダルdiv :
<div id="modal" class="modal">
@{Html.RenderPartial("_Login", new Sample.Models.LoginModel());}
</div>
_Login 部分ビューは次のとおりです。
@model Sample.Models.LoginModel
@section Validation {
@Scripts.Render("~/bundles/jqueryval")
}
<section id="Login">
@using (Html.BeginForm("Login", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "LoginForm", ReturnUrl = ViewBag.ReturnUrl }))
{
<div class="modal-content wrap col-md-4 col-xs-12 col-sm-12 col-md-offset-4">
@Html.AntiForgeryToken()
<div class="row">
<button type="button" class="close" id="btnLoginModalClose" style="margin-top:-15px" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="row-fluid">
<div id="LoginDialog" class="col-md-12">
<div class="modal-header">
<h3 id="login" class="modal-title">
Freshers Login
</h3>
<div class="ui-state-error-text">
@if (TempData["ModelState"] != null)
{
@TempData["ModelState"]
}
</div>
</div>
<div class="modal-body">
<div class="form-group">
<span class="ico-email"></span>
@Html.TextBoxFor(m => m.UserName, new { id = "floginEmail", placeholder = "Email", type = "email", @class = "input-lg ipt ip-email" })
<div class="text-danger">
@Html.ValidationMessageFor(model => model.UserName)
</div>
</div>
<div class="form-group">
<span class="ico-pwd"></span>
@Html.TextBoxFor(m => m.Password, new { id = "floginPassword", placeholder = "Password", type = "password", @class = "input-lg ipt ip-pwd" })
<a href="#" id="loginpswdshow" onclick="showhide($(this));"><span style="position:relative" id="sploginpswdshow" class="glyphicon glyphicon-eye-open show"></span></a>
<div class="text-danger">
@Html.ValidationMessageFor(model => model.Password)
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">
@Html.CheckBoxFor(m => m.RememberMe, new { id = "chkRemember", type = "checkbox", @class = "checkbox" })
</span>
@Html.LabelFor(m => m.RememberMe, new { @class = "form-control" })
</div><!-- /input-group -->
</div>
</div>
<div class="modal-footer" style="margin-top:14px">
<input type="submit" id="btnLogin" name="login" style="margin-top:-5px" class="btn btn-primary pull-left btn-flogin" value="Log-in" />
<div class="row-fluid">
<a class="text-center" style="font-size:medium" onclick="fresherForgotClick();" id="lnkForgot" href="#">Forgot password?</a>
</div>
</div>
<span class="text-info"><strong>Do not have an Account? <a class="btn alert-danger" id="btnCreateAccount">Click here to Create one!</a></strong></span>
</div>
</div>
</div>
}
</section>
そして、これが _Login Post Action の結果を持つ私のHomeControllerです
public ActionResult Login(string redirect, Models.FreshersModel model)
{
if (model.IsValid(model.UserName,model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(redirect) || String.Compare(redirect, "none", StringComparison.OrdinalIgnoreCase) == 0)
{
if (redirect != null) Response.Redirect(redirect, true);
}
else
{
return View("Index", "User");
}
}
ModelState.AddModelError("", "Incorrect User Credentials");
//ModelState.AddModelError("", "You entered an invalid password");
TempData["ModelState"] = "Incorrect User Credentials";
//return null;
return RedirectToAction("Index", "Home");
}
次の方法でこれを達成できるかどうか教えてください。