控制器的HttpPost动作被调用两次

3
以下是我的应用程序中的确切情况。 一只忙碌的猫 我相信这张图片清楚地解释了问题。如果您对理解有任何问题,请告诉我。
问题是HttpPost操作被调用两次,导致数据库中添加了两个条目。
我该如何防止这2个操作?

请问您能否与我们分享您的 form.buttonInlineSave 的 HTML 代码? - Anton Rudeshko
1
看到实际的代码而不是图片会非常愉快。 - Anton Rudeshko
2个回答

4
问题出在每次点击按钮时都会给表单添加一个 submit() 处理程序,因此第二次提交表单时,它会触发两次操作,第三次点击意味着三个帖子,以此类推。
要解决这个问题,请修改代码,仅钩取提交按钮的 click() 或表单的 submit()。我更喜欢表单提交。请尝试以下代码:
$("form").submit(function(e) {
    e.preventDefault();
    $.ajax({
        url: 'EditEntryInline',
        type: 'POST',
        data: $(this).serialize(),
        success: function(result) {
            if (result.success) {
                window.location.reload();
            }
            else {
                // inform the user that the save didn't work
            }
        }
    });
});

此外,您应该使用一个id修改选择器,以便此代码不会连接到出现在页面上的每个表单的submit()事件。

2
还有,他需要使用preventDefault() - webdeveloper
感谢您的回复,并帮助我理解这个问题。但是移除按钮点击事件并没有起作用...它仍然调用了两次动作。 - Nirman
太好了,非常感谢。event.preventDefault()起了作用。干杯,伙计。感谢你们两个提供宝贵的技巧。 - Nirman
@Nirman 没问题。如果这个答案帮助你解决了问题,请点击左边的绿色勾来标记为已接受。谢谢。 - Rory McCrossan
完成了,只是想知道它是否仍然正常工作,只需添加event.preventDefault(),我没有从任何两个事件中删除事件绑定.. - Nirman
1
这是因为 preventDefault 阻止了任何进一步的提交。你应该也从点击事件中删除 submit() 钩子。 - Rory McCrossan

1

您正在为实际表单提交添加另一个ajax提交。考虑在结尾处加上return false;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接