showModalDialog会干扰ClientScript.RegisterStartupScript吗?

时间:2009-04-02 17:49:07

标签: asp.net showmodaldialog

我通过“window.showModalDialog(...”显示一个模态对话框,它发生在vbscript函数中(显示的页面是aspx)。我想根据数量调整窗口的大小。数据表中的行正在返回。所以很自然地我会注册一个启动脚本,根据行数调整窗口大小。好吧,这不起作用,所以我尝试注册一个只显示msgbox的脚本。 / p>

代码看起来像(在OnLoad事件处理程序中):

 if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello"))
        {
            this.ClientScript.RegisterStartupScript(typeof(MyPageClassName), "hello",
                    @"<script language=vbscript>
                        sub fnWindowOnLoad()
                            MsgBox ""hello""
                        end sub
                        <script>", false);
        }
        if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello"))
        {
            throw new Exception("Failed to load script");
        }

对我来说,看起来这应该有效并在页面加载时显示一个“hello”的消息框(我已经将窗口的onload事件设置为fnWindowOnLoad)。但是什么都没有,没有例外,没有警报。我已经尝试过我可以在电话类型中想到的每种类型。似乎没什么用。我唯一能想到的是,因为对话框是一个模态ClientScript.RegisterStartupScript将无法正常运行。但这对我没有任何意义。

我直接将MsgBox“hello”调用放入我的脚本块中并显示警告,这样就可以了。但是我需要在后面的代码中修改一些参数,所以我必须尽可能地使用RegisterStartupScript。

2 个答案:

答案 0 :(得分:0)

您是否尝试通过window.open()而不是window.showModalDialog()打开窗口?我在网上看到一些关于showModalDialog()和RegisterStartupScript之间不兼容的帖子。

showModalDialog()是一种仅限IE的方法,因此不建议使用它。我知道它很方便,因为它返回一个值,但有各种方法来模拟这个功能。

编辑: showModalDialog()的另一个问题是IE经常缓存结果。这意味着如果有一次你调用对话框,你没有调整它,那么另一次你做,然后第二次可能会得到你的第一个缓存对话框。解决这个问题的一种方法是在最后添加一个唯一的查询字符串。像MyDialog.aspx?q = 320934(根据服务器抽搐随机生成或生成)。

答案 1 :(得分:0)

解决方法是使用一个脚本从隐藏字段中读取值,然后调整对话框的大小。该值在Page_Load上设置。使用RegisterStartupScript似乎从来没有工作,RegisterClientScript也没有,所以我很确定模态对话框和RegisterXxx不相处。需要使用window.dialogHeight&amp; vbscript中的window.dialogWidth。