5

.csファイルで3つのJavaScript関数を呼び出したいのですが、これを試しました。

protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                ClientScriptManager script = Page.ClientScript;
                ClientScriptManager script2 = Page.ClientScript;
                ClientScriptManager script3 = Page.ClientScript;

                script.RegisterClientScriptBlock(this.GetType(), "key", "centerPopup1()", true);
                script2.RegisterClientScriptBlock(this.GetType(), "key", "loadPopup1()", true);
                script3.RegisterClientScriptBlock(this.GetType(), "key", "msg1()", true);

            }
        }

成功せず、ポストバックには何も起こりませんが、これらの関数の1つを呼び出そうとすると、機能します。

4

3 に答える 3

6

複数を作成する代わりに、1つのStartupScriptブロックと複数のClientScriptBlock(異なるキー)しか登録できないと思います。それらを隣り合わせにします。

スタートアップ:フォームClientScriptにロードされます:ページの下部

script.RegisterClientScriptBlock(this.GetType(), "key", "centerPopup1(); 
loadPopUp1();  msg1();", true);
于 2012-08-06T21:06:21.413 に答える
1

スクリプトブロックには常に同じ識別子(「キー」)を使用しています。この場合、最後のスクリプトブロックが勝ちます。したがって、異なるキーを提供する必要があります。

MSDN

クライアントスクリプトは、そのキーとタイプによって一意に識別されます。同じキーとタイプのスクリプトは重複と見なされます。このページに登録できるのは、特定のタイプとキーのペアを持つ1つのスクリプトのみです。すでに登録されているスクリプトを登録しようとしても、スクリプトの複製は作成されません。

編集:あなたはまた、ポストバックではなく、初期ロード時にのみスクリプトを登録したいと思ったと思います。if(!IsPostBack)したがって、代わりに確認する必要があります。

于 2012-08-06T21:05:10.707 に答える
0

RegisterClientScriptBlockの代わりにRegisterStartupScriptを使用してみてください。RegisterClientScriptBlockを使用すると、残りのページが読み込まれる前にスクリプト呼び出しを実行できます。参照しようとしているコンポーネントがまだロードされていない場合、呼び出しは失敗します。

また、JavaScriptコードをスクリプトタグで囲む必要があります。

ClientScriptManager.RegisterStartupScriptメソッド(タイプ、文字列、文字列、ブール値)を参照してください。

于 2012-08-06T21:02:46.550 に答える