0

vbscript関数で発生する「window.showModalDialog(...」を介してモーダルダイアログを表示しています(表示されているページはaspxです)。行の数に基づいてウィンドウのサイズを変更したいと思います当然、行数に基づいてウィンドウのサイズを変更するスタートアップ スクリプトを登録しますが、うまくいかなかったので、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.showModalDialog() ではなく window.open() でウィンドウを開こうとしましたか? showModalDialog() と RegisterStartupScript の間の非互換性に関する Web 上の投稿を見たことがあります。

showModalDialog() は IE のみのメソッドであるため、とにかくお勧めしません。値を返すので便利なのはわかっていますが、この機能をシミュレートするにはさまざまな方法があります。

編集: showModalDialog() のもう 1 つの問題は、IE が結果を頻繁にキャッシュすることです。これは、一度ダイアログを呼び出してサイズを変更せず、別のときにサイズを変更すると、2 回目に最初にキャッシュされたダイアログが取得される可能性があることを意味します。これを回避する方法は、最後に一意のクエリ文字列を追加することです。MyDialog.aspx?q=320934 のように (ランダムに生成されるか、サーバー ティックに基づいて生成されます)。

于 2009-04-02T18:10:50.133 に答える
0

これに対する解決策は、隠しフィールドから値を読み取り、ダイアログのサイズを変更するスクリプトを用意することでした。値は Page_Load に設定されました。RegisterStartupScript を使用しても、RegisterClientScript も機能しないように見えたので、モーダル ダイアログと RegisterXxx がうまくいかないことは確かです。vbscript で window.dialogHeight と window.dialogWidth を使用する必要があります。

于 2009-04-06T19:32:54.053 に答える