0
  1. 在我的 MVC 3 应用程序中,我有一个链接按钮,单击此按钮后,会在 jquery 对话框中加载部分视图。

看法

   <a class="dialogLink" href="/Home/OpenDialog">OPen Dialog</a>

局部视图

<div id="dlgReport"><input type="button" id="closeDialog" value="Close"/></div>

控制器

public ActionResult OpenDialog(ViewModel model){
 //setting value
return PartialView(model);}

jQuery代码

$(function () {
  $.ajaxSetup({ cache: false, async: false });
  $('.dialogLink').live('click', function () {
     var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
     var dialogDiv = "<div id='" + dialogId + "'></div>";
     var data = $('form').serialize();
     $.post(this.href, data)
     .success(function (result) {
        $(dialogDiv).html(result).dialog({
        autoOpen: true,modal: true,title: 'Test',
        open: function () {
          $('#closeDialog').bind('click', function (e) {
          //debugger;
          $(".ui-dialog-content").dialog().dialog("close");
     });}});})
     return false;});});
  1. 一切正常,当我单击链接按钮(打开对话框)时,一个发布请求将转到控制器,填充数据并将数据传递给部分视图和部分视图加载自定义“关闭对话框”按钮。

  2. 第一次单击“关闭对话框”按钮时,关闭对话框,但是当我再次加载对话框时,“关闭对话框”将不起作用。

  3. 我用调试器检查,第二次,

    ('#closeDialog').bind('click', function (e) {

    没有调用,不知道这里有什么问题。请建议!谢谢!

注意 - 如果我使用代码“ $(this).dialog('close'); ”而不是“ $(".ui-dialog-content").dialog().dialog("close"); ”,那么从第一次点击“关闭对话框”按钮开始,我收到未知错误。

4

2 回答 2

0

您可能不会多次绑定事件。尝试

 $(function () {
            $.ajaxSetup({ cache: false, async: false });
            $('.dialogLink').live('click', function () {
                var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
                var dialogDiv = "<div id='" + dialogId + "'></div>";
                var data = $('form').serialize();
                $.post(this.href, data)
                .success(function (result) {
                    $(dialogDiv).html(result).dialog({
                        autoOpen: true, modal: true, title: 'Test',
                        open: function () {
                            $('#closeDialog').unbind('click', fnBindClick);
                            $('#closeDialog').bind('click',fnBindClick);
                        }
                    });
                })

                function fnBindClick(e) {
                    //debugger;
                    $(".ui-dialog-content").dialog().dialog("close");
                } 
                return false;
            });
        });
于 2013-11-14T09:45:43.717 回答
0

最后,我从其他堆栈溢出线程得到了答案,我们需要清空并删除对话框,

$(function () {
 $.ajaxSetup({ cache: false, async: false });
 $('.dialogLink').live('click', function () {
 var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
 var dialogDiv = "<div id='" + dialogId + "'></div>";
 var data = $('form').serialize();
 $.post(this.href, data)
 .success(function (result) {
    $(dialogDiv).html(result).dialog({
    autoOpen: true,modal: true,title: 'Test',
    open: function () {
      $('#closeDialog').bind('click', function (e) {
      //debugger;
      $(".ui-dialog-content").dialog().dialog("close");
      $(this).empty();
      $(this).remove();
 });}});})
 return false;});});
于 2013-11-14T16:45:04.693 回答