私はブートストラップモーダルでログインしてウェブサイトを構築しています。ユーザーが間違ったユーザー名やパスワードを入力した場合は、モーダルにメッセージを表示する必要があります。私はjsonとしてajax経由でメッセージを渡すことができましたが、IEはjsonをファイルとしてダウンロードしようとします。そしてChromeはブラウザウィンドウでそれを開きます。これをやめるにはどうしたらいいですか?ログインに使用されるブートストラップモーダルにメッセージを返します
ログインフォームはモーダルでレンダリング部分図である。
<!-- LOGIN MODAL -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Log In to your Account</h4>
</div>
<div class="modal-body">
<p id="failedloginmessage" class="alert-danger"></p>
@using (Html.BeginForm("Login", "Login", FormMethod.Post, new { id = "loginForm" }))
{
@Html.AntiForgeryToken()
<div class="loginForm">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control", id = "txtUserName" } })
@Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label" })
@Html.PasswordFor(model => model.Password, htmlAttributes: new { @class = "form-control", placeholder = "Password", id = "txtPassword" })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
</div>
<div class="form-group">
<button id="btnlogin" type="submit" class="btn btn-primary btn-block">Log In</button>
</div>
</div>
<div class="checkbox">
<label><input type="checkbox"> Remember me</label>
<a href="#" class="pull-right link">Forgot Password?</a>
</div>
}
</div>
ボタンのクリックによってトリガ
私のjqueryの:
$("#btnlogin").click(function() {
$.ajax({
url: "/Login/Login",
type: "POST",
datatype: 'application/json',
contentType: 'text/html',
data: $("#loginForm").serialize(),
success: function (result) {
if (result.success === "false")
$("#failedloginmessage").html(result.response);
}
})
});
マイログインコントローラ:
[HttpPost]
public ActionResult Login(CModel model)
{
try
{
Person user = new Person(model.UserName, model.Password);
if (user.Login())
{
Session["user"] = user;
return RedirectToAction("Index", "User");
}
else
{
var result = new { success = "false", response = "User name or password is incorrect." };
return Json(result, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
throw ex;
}
}
ajax呼び出しのリダイレクト応答を返すことには意味がありません。また、あなたの現在のコードは、通常のフォーム送信を妨げていません( 'preventDefault()'または 'return false'を使用して、通常のフォーム送信を防止しています) – Shyju