【问题标题】:MVC 3 AJAX Function Post Two TimesMVC 3 AJAX 函数发布两次
【发布时间】:2011-02-25 15:07:20
【问题描述】:

我正在使用带有 AJAX/JQuery 的 Visual Studio 2010 和 MVC 3。我遇到的问题是代码发布了两次。仅当您发布某些内容然后再次发布时才会发生这种情况。

这是我的 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 页面有一个调用 CreateCommentPartial.cshtml 文件的 JQuery 对话框。当用户填写时,它调用“CreateComment”函数,然后调用“GetComments”并在新的发布后刷新cmets。

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

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

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-controller


    【解决方案1】:

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

    【讨论】:

    • 上面的脚本在一个 JavaScript 文件中。我在 Shared 文件夹中的 _Layout.cshtml 文件的标题中声明了该脚本。
    • 自己找到了答案。需要添加“form.unbind('submit');”在表单之前提交
    【解决方案2】:

    问题是方法被调用了两次,可以解决,用switch变量什么时候关联事件来控制。

    例子:

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

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多