如何在jQuery UI对话框中加载页面

如何在jQuery UI对话框中加载页面,jquery,razor,Jquery,Razor,我试图在jQuery对话框中加载另一个页面。我已经看过很多文章(包括下面的)。似乎公认的技术是: $(function () { $(document).ready(function () { var d1= $('#dialog-import').dialog({ resizeable: false, height: 600, modal: true,

我试图在jQuery对话框中加载另一个页面。我已经看过很多文章(包括下面的)。似乎公认的技术是:

$(function () {
        $(document).ready(function () {
                var d1= $('#dialog-import').dialog({
                resizeable: false,
                height: 600,
                modal: true,
                autoOpen: false,
                buttons: {
                    'My button1': function () {
                        $(this).dialog('close');
                    },
                    Cancel: function () {
                        $(this).dialog('close');
                    }
                }
            });

            d1.load('/DataSets/ImportSpreadsheet/91D55CAC-6C2C-46EE-8730-0DBFE26D1D92').dialog('open'); 

        });
    });
这将打开对话框,包括完整内容和我的两个对话框按钮,但是,这两个对话框按钮不起作用(我无法单击它们)

代码的其他备选方案,如:

 $('#dialog-import').load('/DataSets/ImportSpreadsheet/' + a, function () {
                $('#dialog-import').dialog('open');
            });
在Google开发者控制台中导致此错误:

Uncaught TypeError: Object [object Object] has no method 'dialog' 
我一定错过了什么。然而,我真的一直在看,没有任何运气

谢谢

这就是我想做的,尝试了他们的建议,但没有成功:


问题是我试图加载一个完整的页面,其中包括页眉、正文和html元素。jQuery不喜欢这样

我找到了两种可能的解决方案:

  • 使用C#MVC局部视图。确保部分视图不包含标题、html等元素。使用原始问题中的代码不会出现问题

  • 使用iFrame元素,并加载要更改src属性的页面,如下面的代码所示

    $('#选择器')。单击(函数(){
    $('dialog import').attr('src','/dataset/ImportSpreadsheet/…'); $('dialog import')。dialog('open');
    });

  • 尽管如此,我还是对这么多人说他们不必担心标题/正文标签感到困惑,就像这篇帖子含蓄地说:


    我会继续研究,但有人会发现这很有用。

    我想你忘了包括jQueryUI代码,因为
    对话框
    方法未知。它包括在内。请注意,如果我不调用加载,对话框将打开(如果我执行$('#dialog import')。对话框('open')将打开,但它没有任何内容,因为我没有加载任何内容)。我只能在
    .load()
    调用中使用无效URI再现错误,这似乎与您的描述不符,因为您正在接收异步数据。您可以通过将
    .load()
    调用替换为full来发现更好的错误(如果有),因为success/error函数是显式的。我相信这个问题可能与
    .load()
    的错误响应有关,它破坏了对话框的功能。Andy,我也试过$.get()一个,它的行为也一样。我正在加载的Url包含一个完整的html页面,即:它不是一个小节。这是有效的吗?如果HTML是完整的,而不仅仅是一个片段,它应该不会导致问题。浏览器的
    .innerHTML
    通常会过滤
    等元素。使用full进行加载,同时确保在选项中设置了
    dataType:'html'
    ,怎么样。根据我的经验,jQuery的数据类型猜测并不总是正确的。没有一个有效的例子,我无法提供任何更具体的东西,但我很高兴继续猜测:-)太好了!我很高兴你得到了一个解决方案,并且你添加了一个答案,因为它将对将来搜索的其他人非常有用。您最后是否尝试了
    $.ajax()
    方法?我确信我以前在对话框中加载过完整的HTML,并且必须在选项中指定
    dataType:'HTML'
    。不管怎样,局部视图总是更可取的,因为没有发送不必要的数据,但我仍然对它为什么不能处理整个页面感兴趣。否。我还没有测试$.ajax。我测试了$.get。我会在有时间的时候测试ajax(推迟测试)。谢谢