我正在将项目从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有关,但我的引用是正确的,我无法弄清楚它为什么不起作用。这让我疯了。我有什么问题吗?
答案 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”);