0

我正在通过“window.showModalDialog(...”显示一个模式对话框,这发生在一个 vbscript 函数中(显示的页面是 aspx)。我想根据 a 中的行数调整窗口大小数据表回来了。所以我很自然地去注册一个根据行数调整窗口大小的启动脚本。好吧,那没有用,所以我尝试注册一个只显示 msgbox 的脚本。

代码看起来像(在 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");
        }

在我看来,这应该可以工作,并在页面加载时显示一个消息框,上面写着“你好”(我已将窗口的 onload 事件设置为 fnWindowOnLoad)。但所发生的一切都没有,没有例外,没有警觉。我已经尝试了 typeof 调用中我能想到的所有类型。似乎没有任何效果。我唯一能想到的是,由于对话框是模态 ClientScript.RegisterStartupScript 将无法正常运行。但这对我来说没有任何意义。

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

4

2 回答 2

0

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

showModalDialog() 是一个仅限 IE 的方法,所以无论如何都不推荐。我知道这很方便,因为它返回一个值,但是有多种方法可以模拟此功能。

编辑: showModalDialog() 的另一个问题是 IE 经常缓存结果。这意味着,如果您有一次调用该对话框,但您没有调整它的大小,那么另一次您这样做,那么第二次可能会获得您的第一个缓存对话框。解决这个问题的一种方法是在末尾添加一个唯一的查询字符串。像 MyDialog.aspx?q=320934 (随机生成或基于服务器 tic 生成)。

于 2009-04-02T18:10:50.133 回答
0

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

于 2009-04-06T19:32:54.053 回答