1

我正在将一个项目从 SP2007 迁移到 SP2010。我想让一个模式弹出窗口工作,从一个 aspx 页面打开一个列表的新项目窗口。我无法让模态在最基本的示例中工作,我无法弄清楚发生了什么。

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

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 有关,但我的参考是正确的,我不知道为什么它不起作用。这让我发疯了。任何线索我做错了什么?

4

2 回答 2

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');

希望它有所帮助。

于 2012-08-30T09:33:20.303 回答
0

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

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

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

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

ExecuteOrDelayUntilScriptLoaded(function(){

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

},"sp.ui.dialog.js");

于 2012-08-31T15:52:44.647 回答