我正在尝试将数据作为模型从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);
}
});
答案 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并不总是能够很好地利用其框架不支持的功能。