jQuery事件在asp.net mvc(4)第二部分中的部分视图发布后停止工作

时间:2014-07-04 03:46:51

标签: jquery ajax asp.net-mvc twitter-bootstrap asp.net-mvc-4

我有一个具有以下布局的视图 enter image description here 父视图由几个PartialView组成。其中一个是一个列表,其中每个项目都有一个相应的Edit按钮,该按钮将项目加载到另一个PartialView中,但是这是通过ajax加载到模态引导对话框中。

通过点击编辑按钮部分视图在模式对话框中加载没有问题,但在提交对话框后,编辑按钮停止以触发事件并且模态不再被加载,我的意思是,编辑按钮的点击处理程序停止工作。

我认为这是因为在发布modal im ajax后重新加载包含Edit按钮的List Partial View,因此我需要重新绑定事件。但是通过这样做,它会在编辑点击事件和模态表单提交之间形成一个循环调用吗?

父视图中的脚本:

$(".btn.mylink").on("click", function () {            
            var id = $(this).data('id');
            var url = "/SalidaDetalle/Edit/" + id;            
            $.get(url, function (data) {
                $(".modal-body").html(data);
                $('#myModal').modal('show');

                $(".edit-detail").on('submit', function () {
                    $.post($(this).attr('action'),
                    $(this).serialize(), 
                    function (data, status) {                        
                        $('#myModal').modal('hide');
                        $("#details").html(data);

                    }).error(function (error, status, a, b) {
                        writeError('msgError', 'Error processing request. Please check errors and try again!');
                        $('.modal-body p.body').html(error.responseText);

                    });
                    return false;
                });

            });
        });

注意: 此问题与this one

有关

1 个答案:

答案 0 :(得分:9)

不是直接将事件绑定到按钮,而是将它们锚定到不会刷新的包含块。即使您已在该部分视图中重新加载内部内容,您的事件也将继续激活。

$("#container").on("click",".btn.mylink", function (evt) {            
        var id = $(evt.currentTarget).data('id');
        var url = "/SalidaDetalle/Edit/" + id;            
        $.get(url, function (data) {
            $(".modal-body").html(data);
            $('#myModal').modal('show');
        });
    });

$("#container").on('submit',".edit-detail", function (evt) {
         $.post($(evt.currentTarget).attr('action'),
         $(evt.currentTarget).serialize(), 
         function (data, status) {                        
             $('#myModal').modal('hide');
               $("#details").html(data);

         }).error(function (error, status, a, b) {
              writeError('msgError', 'Error processing request. Please check errors and try again!');
            $('.modal-body p.body').html(error.responseText);

   });
   return false;
   });

你需要调整脚本并将带有id容器的div添加到父视图中,但是你明白了这个想法