【问题标题】:Load jqueryui modal dialog from function in external js从外部js中的函数加载jqueryui模式对话框
【发布时间】:2012-11-14 21:07:02
【问题描述】:

在 ASP.NET MVC 中,我试图通过调用驻留在外部 js 文件中的函数来显示 jqueryUI 模式对话框。这样做的原因是我想在某个地方编写一个 js 方法,然后用一些参数调用它,而不是在每个页面上复制粘贴它。

这是我的 CustomFunctions.js 文件:

function CustomFunctions() { };

CustomFunctions.prototype.loadModalDialog = function (dialogDivID, callerElementDivID, dialogSize, actionControllerName, container)
{
  var dialogElement = $('#' + dialogDivID);
  var callerElement = $('#' + callerElementDivID);
  dialogElement.dialog
  (
    {
        autoOpen: false,
        show: "slide",
        width: dialogSize,
        resizable: false,
        modal: true
    }
  );

callerElement.click(function() 
{
    dialogElement.load("@Url.Action(" + actionControllerName +")", function() 
    {
        $(container).dialog('open');
    });
    return false;
})

}

现在,在我的 List.cshtml 视图中,我编写了以下内容:

@Html.ActionLink(
        "click me", 
        "List", 
        new {string.Empty},
        new { onclick = "Javascript:showModal();" }
        );

@Scripts.Render("~/bundles/custom");
<script>
    function showModal()
    {
        var custom = new CustomFunctions();
        custom.loadModalDialog("my-dialog", "show-modal", 400, "List", this);
    }
</script>

问题是模式对话框没有弹出。在客户端调试时,它进入 loadModalDialog,它正确地找到了所有变量,它遍历了所有 js 代码,没有抛出错误(这让我感到困惑)但没有显示对话框。

我错过了什么吗? 谢谢,

【问题讨论】:

  • DOM中是否存在id为my-dialog的元素?
  • 在调试时发现它正确地作为 HTMLDivElement。这是否回答你的问题?谢谢,
  • 您检查过&lt;div&gt; 是否已为ui-dialog 应用了适当的类

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


【解决方案1】:

这在外部 js 文件中不起作用

"@Url.Action(" + actionControllerName +")"

这在与模板内联时有效,因为模板在发送到客户端之前已被 prased 和渲染。当它被放入外部 js 文件时,它是一个文字字符串。

custom.loadModalDialog("my-dialog", "show-modal", 400, "List", 这 /*可能不是你所期望的*/);

此时在代码中传递this 是传递文档或窗口对象。然后您尝试在容器上调用dialog('open'),这不是您期望的对话框对象。

还有在document.ready 事件之外调用jquery 的问题。除非在页面加载后调用 showModal(),否则 jquery 函数将不起作用。

任何最新的浏览器都有一个用于调试 js 的 javascript/控制台。

【讨论】:

  • 这正是我所做的。我让它在一个页面上工作,然后我将该方法移动到一个单独的 js 中并使其可配置。为什么 actioncontrollerName 不起作用?这取自 Darin 的回答:stackoverflow.com/questions/6846139/…
  • 你的例子用“this”不起作用,我不明白为什么它应该 - 我的意图是调用 javascript,而不是将 Model 对象作为查询字符串发送(这是你的代码所做的,我刚试过)
  • 我在上面编辑了我的回复。但是,是的,上面的代码不起作用。我只是引用您的 OP 来指出问题所在。
  • 我对 Url.Action 做了更多研究,看来您是绝对正确的。我正在做的事情不可能发生。所以我会接受这个作为答案,但我需要继续寻找替代方案来将我的 javascript 集中在一个文件中,而不是将它们复制粘贴到我的 MVC 项目中的所有视图上(这是我的问题的目的)。谢谢
  • 将 url 而不是 controllerActionName 传递给函数。然后在配置自定义对象时从视图中调用@Url.Action(...)
猜你喜欢
  • 2011-05-13
  • 2011-07-29
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多