【问题标题】:jQueryUI Modal open event & MVC.NET causing error ".dialog is not a function"jQueryUI 模态打开事件和 MVC.NET 导致错误“.dialog 不是函数”
【发布时间】:2011-03-04 22:20:21
【问题描述】:

我希望有人能提供帮助,因为我对此束手无策。我想做的是这个。

  1. “Draggable”项目被拖放到“Droppable”区域(此方法有效)
  2. 这会将项目的 id 发布到我的控制器,该控制器返回它的项目类型(这有效)
  3. 我将返回的项目名称传递给一个函数,该函数打开一个模式并根据特定项目在模式中呈现部分视图。

最后一点是问题所在。上述所有步骤都可以正常工作,弹出模态并将部分视图呈现给模态。但是关闭对话框的按钮会引发错误“.dialog is not a function”,并且在使用角落中的“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 () { ... } 位,关闭按钮就会起作用,我可以一次又一次地重新打开模式,但是一旦我把它放回错误就会抛出。这显然是原因,但我一生都无法弄清楚原因。

在此先感谢您的帮助,很抱歉发了这么长的帖子。

更新:

我尝试在 document.ready 中初始化模态,并从第一个主函数中的“drop”函数调用它。通过这样做,我将其范围缩小到从我的控制器加载部分视图的这行代码。没有这条线,功能就可以工作。关于这有什么问题的任何想法。

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

【问题讨论】:

  • @Mark OB:我会创建一次对话框并在open 函数之外重新填充内容(使用.load)。我见过在一个元素上多次调用小部件时会发生奇怪的事情。你试过这样的策略吗?
  • @Andrew Whitaker:我尝试了类似于在 $(document).ready 中初始化模态的方法。我没有尝试在 open 函数之外填充内容。我回家后会试一试,然后告诉你。感谢您的快速回复
  • @MarkOB:看到了更新——你看到结果在像 Firebug 这样的检查工具中回来了吗?你会收到服务器错误吗?例如,有没有可能 MVC 没有找到局部视图?
  • 尝试将{ itemName: itemName }更改为{ "itemName": itemName },看看是否与您的键名和变量名相同。
  • 另外,要解决后续调用此函数的问题,请在函数顶部添加:$('#dialogs').dialog('destroy');

标签: asp.net-mvc jquery-ui dialog


【解决方案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");
                    });
                },
    

    【讨论】:

    • 这行不通。你不能在对象字面量中声明这样的变量。
    • 我知道你要去哪里,但即使使用 $('#dialogs').load 中的 DIV 的实际名称,错误仍然会出现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多