助けてください、私はこの問題に苛立ちました。return jsonresultはjqueryポストで無期限に動作します
ユーザーが送信ボタンを押したときにエラー値を設定するか、リダイレクトを行う必要があります。 (標準的なログインフォーム)。私はajaxでそれを行う必要があります。
私はそのほとんど働いて、ユーザーがクリックを提出するが、ページがちょうど表示さだと思う:「ユーザー名か:{:「/ホーム/インデックス」「リダイレクト」}
または {「エラー」 が指定されたパスワードが間違っています。」}
私はそれをどのように意図しているのかのエラーをリダイレクト/表示していません。 。
いくつかの背景 - フォームがログインフォームであり、そのモーダルポップアップダイアログの内部に配置され(jqueryui)
HERESに私のjQuery:
$("#submit").click(function() {
$.post({
url: "Account/LogOn",
dataType: "json",
success: function (data) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
else {
// data.form contains the HTML for the replacement form
$("#error").replaceWith(data.error);
}
}
});
return false;
});
とHERESに私の対処法:
[HttpPost]
public JsonResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl))
{
return Json(new { redirect = returnUrl });
}
else
{
return Json(new { redirect = "/Home/Index" });
}
}
}
return Json(new { error = "The user name or password provided is incorrect." });
}
HERESに私のフォームです:
@using (Html.BeginForm("LogOn", "Account"))
{
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
<p>
<input id="submit" type="submit" value="Log On" />
</p>
</fieldset>
</div>
}
なぜコントローラ「HttpPost」からリダイレクトできないのですか? (例えば、RedirectToActionはPRGパターンも満たす)。なぜあなたはJSONを返す必要があり、次にそれをクライアント側で行う必要がありますか? – RPM1984
おそらく私はリダイレクトを行うことができますが、私はまたajaxによってエラーを表示するケースをカバーする必要があります。ログインフォームがモーダルダイアログ内にあるので、このインスタンスの別のページにリダイレクトすることはできません – raklos
クリック機能が実行されていますか?あなたの説明に関しては、フォームが通常の方法で提出されるように聞こえます。関数の一番下にあるhttp://api.jquery.com/event.preventDefault/を使用してください。 –