2012-03-16 7 views
1

私はc#asp.netのページとデータベースを更新する更新機能を持っています。この関数では、クライアントサイドのjavascriptを呼びたいと思います。私はpage_load()で起動スクリプトを登録することについて多くを読んだことがありますが、これは常にページ読み込み時にトリガーになります(面白い!)asp.netのC#のページからクライアントのJavaScriptを呼び出すC#のページ

私の更新機能内でスクリプトを呼び出す方法は?ユーザーが「更新」ボタンをクリックするとトリガーされます。私は以下を試しました(私の機能の中で)

protected void doUpdate(object sender, EventArgs e) { 

    string jScript; 
    jScript = "<script type=text/javascript>alert('hello');<" + "/script>"; 

    ClientScript.RegisterStartupScript(GetType(), "Javascript", jScript); 
} 

しかし、それは発射されません。何か案は?どうもありがとう。

[更新]

それは今働いている - 関数がこの

protected void doUpdate(object sender, EventArgs e) { 
    ScriptManager.RegisterStartupScript(this, GetType(),"Javascript", "cleanup();",true); 
} 

のように見えるのクリーンアップは、()私のHTML内のJavaScript関数です。ヘルプのおかげでありがとう:)

+0

を使用する必要があるのUpdatePanelの中​​にある場合のUpdatePanel内のポストバックの原因となるコントロールですか? –

+0

はいそうです。それはおそらく問題でしょうか? –

+0

回答を追加しました。はい、それはおそらく問題です:) –

答えて

3

ポストバックを発生させる制御を使用すると、

ScriptManager.RegisterStartupScript

+0

これはページの読み込みになるのでしょうか? –

+0

あなたdoUpdateでそれを使用することができます、それはいいです –

+0

感謝クラウディオ - 完璧に動作します! –

1

クライアント側のスクリプトをWebサーバーから実行することはできません(クライアントはサーバーが誰であるかを知っていますが、逆もありません)。

この制限を克服する唯一の方法は、a。サーバーから何かを要求する長いポーリングプロセスを作成すると、サーバーは何かを返すまで要求を完了しません(クライアント側は別の要求を行います)。

あなたが本当に探しているのは、websocket(duplex)対応の通信です。錬金術のウェブソケットやSignalR(ダイナミックプロキシ生成のライブラリがあります)をチェックすることができます。

「スクリプトは常にPage_Loadで動作します」という理由は、要求されたページに対して返されるHTMLにスクリプトタグを効果的に挿入するからです。

1

[更新]ボタンは、標準のASPボタンの動作を使用している可能性があります。つまり、レンダリング時にtype="submit"が表示されます。それはケースですので、あなただけ使用することができます。

Page.ClientScript.RegisterOnSubmitStatement 

は、すべてのポストバックのためだけでなく、更新ボタンをスクリプトを登録します覚えておいてください。したがって、Updateをクリックしてjavascriptを実行したい場合は、EventTargetが UpdateButton.ClientIDかどうかを確認する必要があります。また、 RegisterOnSubmitStatementは常に <script>タグを追加するので、javascriptステートメントのタグは含めないでください。

さらに簡単な解決方法では、ASPボタン自体にも OnClientClickというプロパティがあります。これは、ブラウザでボタンがクリックされると、クライアント側のコード(javascript)を実行します。

+0

ありがとう - これは正しいオプションのようです。しかし、私はそれがonSubmitと呼ばれると仮定します。コードがいくつかのチェックを行った後、関数をプログラムで呼び出す方法を探しています。たとえば、更新はOKでした。JSを呼び出します。それ以外の場合は実行しません。ありがとう:) –

+1

ポストバック後にスクリプトを実行する必要がある場合は、クラウディオの解決策が必要です。 –

関連する問題