問題が発生した場合は、モデル検証エラーで更新したい部分的なビューであるログインウィジェットがあります。それ以外の場合は、ページをリロードする必要があります。asp.net mvcパーシャルビューリダイレクトまたはエラー表示
私は、次の
LogOn.cshtml
@{
var ajaxOpts = new AjaxOptions {OnSuccess = "success"};
}
<div id="login">
@Html.ValidationSummary(excludePropertyErrors: true)
<h2>Start by Logging in</h2>
@using (Ajax.BeginForm("LogOn", "Account", ajaxOpts))
{
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td>
<span class="bluey">Username:</span><br />
@Html.TextBoxFor(m => m.UserName, new {tabindex = "1", Class = "field"})
@Html.ValidationMessageFor(m => m.UserName, "*")
</td>
<td>
<span class="bluey">Password:</span><br />
@Html.TextBoxFor(m => m.Password, new {tabindex = "2", Class = "field"})
@Html.ValidationMessageFor(m => m.Password, "*")
</td>
</tr>
<tr>
<td>
<input name="login" type="submit" value="Submit" class="input_btn" tabindex="3" />
</td>
<td>@Html.CheckBoxFor(m => m.RememberMe) @Html.LabelFor(m => m.RememberMe) <span class="bluey"> | </span> @Html.ActionLink("Forgot Password?", "Password", "User")</td>
</tr>
</table>
}
</div>
<script>
function success(context) {
//var returnUrl = context.get_data().returnUrl;
//if (returnUrl) {
// window.location.href = returnUrl;
//} else {
$("#login").replaceWith(context);
//}
}
</script>
と呼び出されるアクションは、私は、データが部分的に誤っている場合、それはので、作業をすることを持っている
[HttpPost]
public ActionResult LogOn(LogOnModel userDetails, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(userDetails.UserName, userDetails.Password))
{
FormsAuthentication.SetAuthCookie(userDetails.UserName, userDetails.RememberMe);
return Redirect(returnUrl);
}
ModelState.AddModelError("", "The username or password provided was incorrect");
}
return PartialView(userDetails);
}
である必要がありビューはエラーで再表示されますが、この部分は、JavaScriptの他の行を成功(コンテキスト)でコメントアウトすると機能しますユーザーが正常にログインし、ページをリダイレクトする必要があります。
これを行うより良い方法はありますか?
statusプロパティとreturnUrlまたはHtmlを持つJson()で匿名オブジェクトを返そうとしましたが、PartialView(userDetails)によって生成されたhtmlをJsonに取得する方法を理解できませんでした)コール、とにかく物事について行くのは間違った方法かもしれないようです。
ステータスコードがサポートされているように見えるので、jquery.ajaxを使用しても問題ないのですか? –
@DanielPowell、それはまさにunobtrusibve-ajaxがカバーで使用するものです - > jquery.ajax。だから完全に同等です。もちろん、それはjquery.ajaxやAJAX呼び出し、つまり最も基本的なXmlHttpRequestオブジェクトの組み込みブラウザでさえも動作しません。サーバーでリダイレクトすると、クライアントは最終的な宛先に到達するまで自動的にリダイレクトを実行します。最終宛先に到達すると、ステータスコードは200になります。 –