0

我正在尝试将数据作为模型从 html 表单发送到 Controller 方法。但是,我不确定 jQuery ajax 帖子如何将此类信息发送到控制器。我提交表单时得到的实际错误是:

找不到资源...请求的 URL:/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);
    }
});
4

2 回答 2

0

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

$(function () {
    $('form').submit(function () {
        ...
        return false;
    });
});
于 2012-06-28T17:11:41.047 回答
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 并不总是能很好地处理其框架不支持的功能。

于 2012-07-02T13:57:19.570 回答