无法获得基本的SP2010 Modal工作

时间:2012-08-29 14:35:50

标签: jquery sharepoint sharepoint-2010 modal-dialog

我正在将项目从SP2007迁移到SP2010。我想获得一个模态弹出窗口,从aspx页面打开列表的New Item窗口。我无法在最基本的例子中使用模态,我无法弄清楚发生了什么。

如果我使用开发人员工具并启用脚本调试,我会一直收到以下错误:

SCRIPT5022: Sys.ArgumentTypeException: Object of type 'SP.UI.ApplicationPages.CalendarSelector' cannot be converted to type 'Sys.IDisposable'.

以下是代码段:

<SharePoint:ScriptLink ID="ScriptLink3" Language="javascript" Name="../ProjectFolder/jquery/jquery-1.7.2.min.js" Defer="false" runat="server" />
<SharePoint:ScriptLink ID="ScriptLink1" Language="javascript" Name="../ProjectFolder/jquery/jquery-ui-1.8.12.custom.min.js" Defer="false" runat="server" />
<SharePoint:ScriptLink ID="ScriptLink4" Language="javascript" Name="../MicrosoftAjax.js" Defer="false" runat="server" />
<SharePoint:ScriptLink ID="ScriptLink5" Language="javascript" Name="../SP.debug.js" Defer="false" runat="server" />
<SharePoint:ScriptLink ID="ScriptLink6" Language="javascript" Name="../SP.UI.Dialog.js" Defer="false" runat="server" />
<script type="text/javascript">
    function OpenInDialog(title, url) {
        var options = SP.UI.$create_DialogOptions();
        options.title = title;
        options.width = 680;
        options.height = 500;
        options.url = url;
        options.dialogReturnValueCallback = Function.createDelegate(null, ConfirmationCallback);
        SP.UI.ModalDialog.showModalDialog(options);
    }

    function ConfirmationCallback(dialogResult, returnValue) {
        if (dialogResult == SP.UI.DialogResult.OK) {

        }
    }


    OpenInDialog('test', 'http://portal.dev.loc/sites/TestSite/_layouts/Test.aspx');

</script>

我一直认为这个问题与SP.UI.Dialog.js有关,但我的引用是正确的,我无法弄清楚它为什么不起作用。这让我疯了。我有什么问题吗?

2 个答案:

答案 0 :(得分:1)

我最近一直在做类似的事情,所以为了更清楚地澄清代码,尝试使用以下方法:

    function OpenInDialog(title, url) {
            var options = {
                title: title,
                width: 680,
                height: 500,
                url: url,
                dialogReturnValueCallback: ConfirmationCallback
            };

            SP.UI.ModalDialog.showModalDialog(options);
        }

    function ConfirmationCallback(dialogResult, returnValue) {
        if (dialogResult == SP.UI.DialogResult.OK) {
            // TODO
        }
    }

    OpenInDialog('test', 'http://portal.dev.loc/sites/TestSite/_layouts/Test.aspx');

希望它有所帮助。

答案 1 :(得分:0)

问题是竞争条件没有通过将方法调用放在$(document).ready中解决,我之前尝试过(不知道为什么我在这个例子中没有它)。

我试图做一个简单的模态,但是太简单了。在打开页面时尝试立即打开模式不起作用。将完全相同的方法调用移动到按钮工作正常。没有任何Scriptlink是必要的。 SharePoint已在页面上提供了所有jquery库。

我知道这将是一件愚蠢的事。感谢Vardhaman带领我朝着正确的方向前进。

此外,Vardhaman的回答有效: https://sharepoint.stackexchange.com/questions/44548/cant-get-a-basic-modal-to-work-on-2010/44687#comment41263_44687

ExecuteOrDelayUntilScriptLoaded(函数(){

OpenInDialog('test', 'http://portal.dev.loc/sites/TestSite/_layouts/Test.aspx');

}, “sp.ui.dialog.js”);