我有表单供用户提交,我在布局页面中呈现为部分视图。 我使用这个脚本提交局部视图,根据我放在它上面的breackpoint,它总是返回false,数据确实提交给Db,表格没有清除它上面的数据。我在提交按钮上也有一个小脚本但是breackpoint永远不会到达那里。 这是我使用的脚本:
$('#contact').submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$('#contact').html(result);
}
});
return false;
});
$("#Send").bind('click', function (event) {
$("#contact").submit();
});
答案 0 :(得分:2)
您告诉return false
。 Ajax以异步方式运行,因此代码只会启动Ajax,然后转到下一步 - 返回false。它没有时间点击success
(在返回false之前)。
相反,我会做这样的事情:
$('#contact').submit(function (e) {
e.preventDefault(); //prevents the submit
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
datatype : 'html',
success: function (result) {
$('#contact').html(result);
}
});
});
您还可以选择通过添加选项async: false
来同步运行Ajax,但不建议这样做。
正如A. Wolff在评论中提到的,return false
和e.preventDefault
基本上做同样的事情。
如果Ajax不成功,那么该处理程序永远不会被触发。也许为error
添加处理程序可以澄清错误的真正来源:
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
datatype : 'html',
success: function (result) {
$('#contact').html(result);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus + " Error: " + errorThrown);
}
});
答案 1 :(得分:0)
您是否尝试过使用preventDefault
?
$('#contact').submit(function (e) {
e.preventDefault();
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$('#contact').html(result);
}
});
});
修改强>
你有#contact
的提交处理程序,它当然是一个表单。您的成功函数会将控制器返回的局部视图放在... #contact
内吗?这真的是你想要的吗?如果要将表单替换为空白表单,则部分视图应仅包含表单字段,因为您尝试将html发布到#contact
(表单)中。也许你想针对其他一些div?