Javascript 从外部js中的函数加载jqueryui模态对话框

Javascript 从外部js中的函数加载jqueryui模态对话框,javascript,asp.net-mvc,jquery-ui,modal-dialog,jquery-ui-dialog,Javascript,Asp.net Mvc,Jquery Ui,Modal Dialog,Jquery Ui Dialog,在ASP.NETMVC中,我试图通过调用驻留在外部js文件中的函数来显示jqueryUI模式对话框。原因是我想在某个地方写一个js方法,然后用一些参数调用它,而不是在每个页面上复制粘贴它 这是我的CustomFunctions.js文件: function CustomFunctions() { }; CustomFunctions.prototype.loadModalDialog = function (dialogDivID, callerElementDivID, dialogSize

在ASP.NETMVC中,我试图通过调用驻留在外部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>
@Html.ActionLink(
“点击我”,
“名单”,
新的{string.Empty},
新建{onclick=“Javascript:showmodel();”}
);
@Scripts.Render(“~/bundles/custom”);
函数showmodel()
{
var custom=新的CustomFunctions();
custom.loadModalDialog(“我的对话框”,“显示模式”,400,“列表”,此);
}
问题是模式对话框不会弹出。在客户端调试中,它进入loadModalDialog,正确地找到所有变量,遍历所有js代码,不会抛出错误(这让我感到困惑),但不会显示对话框

我错过什么了吗?
谢谢,

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

@Url.Action(“+actionControllerName+”)

这在和模板内联时起作用,因为tempplate在发送到客户机之前就被复制和渲染了。当它被放入exteralJS文件时,它是一个文本字符串

custom.loadModalDialog(“我的对话框”,“显示模式”,400,“列表”, 这可能不是你所期望的

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

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


任何最新的Bowser都有用于调试js的javascript/控制台。

DOM中是否存在id为
my dialog
的元素?调试时,它会正确地将其作为HTMLLevel。这回答了你的问题吗?谢谢,您是否检查了
以查看是否为
ui对话框应用了适当的类这正是我所做的。我让它在一个页面上工作,然后在一个单独的js中移动该方法并使其可配置。为什么我不能工作?这是从Darin的回答中得到的:你的例子中的“This”不起作用,我不明白为什么它应该起作用-我的意图是调用javascript,而不是将模型对象作为查询字符串发送(这就是你的代码所做的,我只是尝试过)我编辑了上面的响应。但是是的,上面的代码不起作用。我引用你的评论只是为了指出问题所在。我对Url做了更多的研究。行动起来,看起来你是绝对正确的。我正在做的事不会发生。因此,我接受这一点作为答案,但我需要继续寻找替代方案,将我的Java脚本集中在一个文件中,而不是将它们复制粘贴到MVC项目中的所有视图上(这就是我的问题的目的)。感谢您将url而不是
controllerActionName
传递给函数。然后在配置自定义对象时,从videw调用
@Url.Action(…)