如何摆脱这个ajax表单发布问题?

时间:2012-03-09 08:10:11

标签: asp.net-mvc-3 jquery

我正在向控制器操作发布表单。我从控制器收到错误。

这是我想要的行为: 如果错误 - 在同一页面上显示正确的错误消息而没有任何页面刷新。 如果成功 - 再次在页面上显示成功消息没有页面刷新

我得到的是该页面使用不同的URL完全刷新并显示: {“status”:“失败”,“msg”:“\ u0027Name \ u0027”}

网址更改为:../respond / update,这是我发布到

的操作

基本上我想抓住这个失败状态并在一个范围内显示msg。

但是为什么它会把我带到另一个页面?

以下是观点:

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" }))
{
  //have my form here
  //submit button
}

Here is the js handler that posts the form:
$('#frmUpdate').submit(function () {
            //validation
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                beforeSend: //show loader
                success: function (result) {
                    alert(result.status);                    
                },
                error: function (xhr, status, error) { alert('error'); }
            });
            return false;
        });

Here is controller:
[HttpPost]
public ActionResult Update(ResponseModel model)
{
    return Json(new { status="Failed", msg = "Name" });
}

修改 在Firefox中,它需要不同的URL。 但在IE8中,我从jquery本身得到了这个错误。有趣...

消息:对象不支持此属性或方法 行:28 查尔:12724 代码:0 URI:/Content/js/external/jquery-1.6.2.min.js?v=3

2 个答案:

答案 0 :(得分:1)

我认为您应该通过这样做来停止默认的提交行为:

$('#frmUpdate').submit(function (e) {
  e.preventDefault();
  <your code here>
});

否则表单提交将导致您想要避免的行为。 希望这会有所帮助。

答案 1 :(得分:0)

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" }))
{
  //have my form here
  //submit button 
}

如果您使用提交按钮,则会发布该页面。您需要使用类型按钮而不是提交。

它会起作用。

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" }))
{
  //have my form here
  //use type button 
}