Jquery MVC3Ajax函数发布两次

Jquery MVC3Ajax函数发布两次,jquery,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-controller,Jquery,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Controller,我正在将VisualStudio2010和MVC3与AJAX/JQuery一起使用。我遇到的问题是代码发布了两次。只有当你发布一些东西,然后再做一次时,才会发生这种情况 这是我的JS: $(document).ready(function () { BindEvents(); }); function BindEvents() { $('#OpenCommentDialog').click(function (event, ui) { var id = $(this).attr(

我正在将VisualStudio2010和MVC3与AJAX/JQuery一起使用。我遇到的问题是代码发布了两次。只有当你发布一些东西,然后再做一次时,才会发生这种情况

这是我的JS:

$(document).ready(function () {
   BindEvents();
});

function BindEvents() {
$('#OpenCommentDialog').click(function (event, ui) {
    var id = $(this).attr('data');
    $('#NewCommentDialog').dialog({
        open: function (event, ui) {
            $('#BugID').val(id);
            var form = $('form', '#NewCommentDialog');
            form.submit(function (e) {
                var comment = form.serialize(true);
                CreateComment(comment);
                return false;
            });
        }
    });
    $('#NewCommentDialog').dialog('open');
    return false;
});
}

function CreateComment(comment) {
if (comment != null) {
    $.post('/Comments/Create/', comment, function (data) {
        if (data == 'Success') {
            var id = $.parseQuery(comment);
            GetComments(id.BugID);
            $('#NewCommentDialog').dialog('close');
        }
    });
}
}

function GetComments(id) {
$('#Comments').find('tr').remove();
$.getJSON('/Comments/GetComments', { id: id }, function (data) {
    if (data != null) {
        if (data.length > 0) {
            $('#CommentListTemplate').tmpl(data).appendTo('#Comments');
        }
    }
});
}
我的HTML页面有一个JQuery对话框,它调用CreateComentPartial.cshtml文件。当用户填写时,它调用“CreateComment”函数,然后调用“GetComments”,并在发布新的注释后刷新注释

现在,问题来了。如果再次单击“CreateComment”链接,而不重新加载页面并填写表单,“CreateComment”将触发两次,“GetComments”也将触发两次Firebug也向我展示了这一点。


我做错了什么?如果在发布后重新加载页面(F5),则不会执行此操作。但它违背了目的。您应该能够多次提交评论,而无需重新加载页面。

您在哪里声明了上述脚本?我对通过局部视图添加到页面的脚本也有类似的问题。不知何故,每次点击一个按钮,脚本都会被添加到页面中,从而将脚本和帖子的数量相乘(脚本的每个副本触发一次)。我将脚本放在一个单独的.js文件中,并在母版页中引用它,从而解决了这个问题。

这个问题是由方法调用两次引起的,您可以使用一个开关变量来解决它,您何时将事件关联到控件

例如:

 var $isActualizaComentarioEventoAsignado = false;

 if (!$isActualizaComentarioEventoAsignado) {
                $isActualizaComentarioEventoAsignado = true;
                $('#pepe').bind('clic', function(e) {});
}

上面的脚本位于JavaScript文件中。我在共享文件夹中的_Layout.cshtml文件头中声明了脚本。我自己找到了答案。需要在form.submit之前添加“form.unbind('submit');”