jQuery AJAX MVC3表单数据不匹配

时间:2012-06-28 14:51:50

标签: jquery ajax asp.net-mvc-3

我正在尝试将数据作为模型从html表单发送到Controller方法。但是,我不确定jQuery ajax post如何将这些信息发送给Controller。我提交表单时收到的实际错误是:

  

无法找到资源...请求的网址:/ OnCallSchedule

我知道地址是正确的,所以我怀疑传递的数据与传递给控制器​​方法的模型不匹配:

[HttpPost]
public JsonResult getSchedule(DateModel dateMod)
{
    ...
    return Json(data);
}

ajax代码是:

$(function () {
    $('form').submit(function () {
        alert('@Url.Action("getSchedule")');
        var date = $('form').serialize();

        var jqxhr = $.post('@Url.Action("getSchedule")', date, function (data) {
            alert("success!");
        })
        .success(function() { alert("second success"); })
        .error(function() { alert("error"); })
        .complete(function() { alert("complete"); });

        jqxhr.complete(function() { alert("second complete"); });
    });
});

列出方法路径的第一个警告语句成功触发。之后,弹出错误消息,并且不会显示其他警报。

应该注意的是,我已经尝试了几乎所有的策略,所以我怀疑我没有使用serialize()命令正确发送数据。我做错了什么?

我也可能没有正确执行jqxhr操作。我能找到可理解的例子的唯一地方是jQuery文档。我最初使用的是:

$.ajax({
    url: '/OnCallSchedule/getSchedule',
    type: 'POST',
    dataType: 'json',
    data: $('form').serialize(),
    contentType: 'application/json; charset=utf-8',
    success: function(data) {
        $("#dataTable").html(data);
    }
});

2 个答案:

答案 0 :(得分:0)

我猜你必须从表单提交事件处理程序return false

$(function () {
    $('form').submit(function () {
        ...
        return false;
    });
});

答案 1 :(得分:0)

我发现了我的问题。我正在使用MVC样式的表单(即@Html.BeginForm),它自动调用控制器操作。我没有成功破坏这个功能,所以我写的ajax代码毫无意义。我最终取消了ajax函数和@Html.BeginForm,完全取消@Ajax.BeginForm。具体做法是:

@using (@Ajax.BeginForm("getSchedule",
                        "OnCallControl", 
                        new AjaxOptions{HttpMethod = "Post",
                                        InsertionMode = InsertionMode.Replace,
                                        UpdateTargetId = "data"}))
{
    ...
}

我了解到MVC并不总是能够很好地利用其框架不支持的功能。