2011-03-04 54 views
1

我希望有人可以帮助,因为我在我的智慧结束与此。我想要做的是这个。jQueryUI模态公开事件和MVC.NET导致错误“.dialog不是一个函数”

  1. “可拖动”项目被放入一个“可投放”区域(这个工程)
  2. 此职位的项目我的控制器的ID返回项目的类型是(这工作)
  3. 我将返回的项目名称传递给打开模式的函数,并根据特定项目在模态中呈现局部视图。

最后一点是问题所在。上述所有步骤都可以正常工作,模式会弹出,部分视图会呈现给模态。但关闭对话框的按钮会抛出错误“.dialog不是函数”,并且在使用角落中的“x”关闭模式后,尝试打开模式将不会发生类似的错误。

下面是我正在努力尝试使此工作的示例。

$(function() { 
     $('.draggable').draggable({ containment: '#imageboundry', revert: 'valid' }); 
     $('#droppable').droppable({ 
      drop: function (event, ui) { 
       $.ajax({ 
        type: "POST", 
        url: '/Home/AddToCart/' + $(ui.draggable).attr("id"), 
        success: function (data) { 
         getItemType(data); 
        } 
       }); 
      } 
     }); 
    }); 

    function getItemType(itemName) { 
     $('#dialogs').dialog({ 
      open: function() { 
       $(this).load("AdditionalContent", { itemName: itemName }, function() { 
        alert("This happened"); 
       }); 
      }, 
      modal: true, 
      resizable: false, 
      title: itemName, 
      width: 400, 
      autoOpen: false, 
      buttons: { 
       "Confirm": function() { 
        $(this).dialog('close'); 
       } 
      } 
     }); 
    } 

这是我的控制器,它返回了局部视图模态

public PartialViewResult AdditionalContent(string itemName) 
    { 

     return PartialView("_" + itemName + "Attributes"); 
    } 

关闭按钮的工作原理,一旦我拿出open: function() { ... }位,我可以一次又一次地重新打开该模式,但一旦我把这回错误被抛出。这显然是原因,但不能为我的生活找出原因。

在此先感谢您的帮助,并对很长的帖子感到抱歉。

UPDATE:

我已经尝试在初始化中的document.ready模式,并从我的“拖放”功能的第一主函数调用它。从这样做我已经缩小到这行代码从我的控制器加载部分视图。没有这条线,功能就起作用。任何关于这个问题的想法。

$(this).load("AdditionalContent", { itemName: itemName } 
+0

@马克OB:我要再次创建对话框,并重新填充的内容(使用'.load ''在'open'函数之外。我发现当小部件在一个元素上被多次调用时会发生奇怪的事情。你尝试过这样的战略吗? – 2011-03-05 03:01:30

+0

@Andrew Whitaker:我尝试了一些类似于在$(document).ready中初始化模态的东西。我没有尝试填充open函数以外的内容。当我回家并让你知道的时候会试试看。感谢您的快速回复 – 2011-03-05 12:23:20

+0

@MarkOB:查看更新 - 您是否看到过像Firebug这样的检测工具的结果?你会得到一个服务器错误?例如,MVC是否有可能找不到局部视图? – 2011-03-05 19:43:59

回答

1

我想通了。包含在部分视图中的是对创建视图时自动添加的jQuery库的第二次调用。另外,它是版本1.4.4,而我在_Layout页面中直接使用了Google的1.5.1版本。由于两个版本之间存在冲突,第二个jQuery库显然打破了功能。直到我看到FireBug控制台,我才注意到1.4.4库的第二次加载。

感谢所有您的帮助,感觉好像有点白痴,但教训了解到.....现在

-2

可以试试这个,但我不知道

$('#dialogs').dialog({ 
    var self = this; 
      open: function() { 
       $(self).load("AdditionalContent", { itemName: itemName }, function() { 
        alert("This happened"); 
       }); 
      }, 
+1

这不起作用。你不能在对象文字中声明一个像这样的变量。 – 2011-03-05 03:07:28

+0

我明白你要去哪里了,但即使通过在$('#dialogs')中使用DIV的实际名称,错误依然会呈现出来。 – 2011-03-05 12:25:13

相关问题