好吧请帮助,我一直在这个问题感到沮丧。返回jsonresult表现未知与jquery post
我需要设置错误值或在用户点击提交按钮时执行重定向。 (它是一个标准的登录表单)。我需要用ajax来做。
我认为它几乎工作,但是当用户点击提交页面只显示: {“重定向”:“/首页/索引”}
或 {“错误”:“用户名或提供的密码不正确。“}
它没有重定向/显示错误我打算如何。
一些背景 - 形式是一个登录表单,它位于一个模式弹出的对话框内(jQueryUI的)
继承人我的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;
});
和我的继承人操作方法:
[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." });
}
继承人是我的表格:
@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 2010-12-21 12:01:16
也许我可以做重定向,但我也需要覆盖通过ajax显示错误的情况。我无法重定向到此实例中的另一个页面,因为登录表单位于模态对话框中 – raklos 2010-12-21 12:03:00
您确定您的点击功能正在运行吗?关于你的描述,这听起来像表单是通常的方式提交。在函数的底部使用http://api.jquery.com/event.preventDefault/。 – 2010-12-21 12:28:32