zoukankan      html  css  js  c++  java
  • SharePoint 2010 使用后台代码向SP.UI.ModalDialog.showModalDialog传值

    文章http://www.cnblogs.com/sygwin/archive/2011/11/08/2241061.html,介绍了弹出窗口和主页面之间的传值。那么如何将后台变量的值传给弹出窗口呢?

    能想到的解决方案思路是:前台写弹出窗口的js代码,后台使用Page.ClientScript.RegisterStartupScript注册js,调用写好的js函数。这样做行不通,会报缺少对象之类的错误。下面是操作步骤:

    1,新建一个可视webpart,并添加一个application page页并命名为SweetDialogPage.aspx。

    在可视webpart的ascx页面添加下面的js代码:

    <script type="text/javascript">
        function openMySweetModalDialog(id) {
            var options = SP.UI.$create_DialogOptions();
            options.width = 500;
            options.height = 250;
            options.url = "/_layouts/PopUpDialog/SweetDialogPage.aspx?id=" + id;
            options.dialogReturnValueCallback =
            Function.createDelegate(null, whenMyModalDialogCloses);
            SP.UI.ModalDialog.showModalDialog(options);
        }

        function whenMyModalDialogCloses() {
            alert('That was totally sweet.');
        }
    </script>

    在SweetDialogPage.aspx页面接收参数id并显示,代码省略。

    然后在可视webpart的cs页面里,新建一个方法:

    protected void OpenMySweetModalDialog(int id)
            {
                // create ECMAScript to call the dialog function and pass the id
                var script = string.Format(@"openMySweetModalDialog('{0}'); ", id);

                // emit script to run on page load
                Page.ClientScript.RegisterStartupScript(
                    typeof(UserControl), Guid.NewGuid().ToString(), script, true);
            }

    最后在Page_Load方法里,调用上面的方法:OpenMySweetModalDialog(5);

    部署webpart,可以看到当放置webpart的页面载入后,并不能如我们期望的那样弹出窗口,而是报错了。那么该如何解决呢?微软提供了SP.SOD.executeOrDelayUntilScriptLoaded方法

    将OpenMySweetModalDialog方法里的代码改成如下内容:

    var script = string.Format(
                    @"function reallyOpenDialogForRealYouGuys() {{
                openMySweetModalDialog('{0}');
            }};
            SP.SOD.executeOrDelayUntilScriptLoaded(reallyOpenDialogForRealYouGuys, 'sp.ui.dialog.js'); ",
                    id);

                // emit script to run on page load
                Page.ClientScript.RegisterStartupScript(
                    typeof(UserControl), Guid.NewGuid().ToString(), script, true);

    原文参考:http://www.sharepointdevelopment.me/2011/11/opening-a-modal-dialog-on-page-load-from-server-side-code-dont-forget-this-sweet-and-totally-critical-function-call/

    关于SP.SOD.executeOrDelayUntilScriptLoaded的更多知识,请google

  • 相关阅读:
    让SiteMapDataSource能选择特定的SiteMap文件
    程序员之路──如何学习C语言(转载)
    Sql Server 2005 Express使用命令工具无法连接问题
    移远公司 NBIoT模块AT指令详细解释
    Excel自动化技术
    解析HTTP报文头
    SOAP报文下发
    双缓冲队列,生产者消费者模式
    夸孩子少用“你真棒”,教你如何夸孩子
    C++面试题相关
  • 原文地址:https://www.cnblogs.com/sygwin/p/2241282.html
Copyright © 2011-2022 走看看