2009-03-13 4 views
0

ASP.Netアプリケーション用のC#コードビハインドでは、変数が設定されていて、JavaScriptの変数を同じに設定したいので、クライアントサイドでいくつかの作業を行うことができます。このC#変数はイベントハンドラで設定され、かなり頻繁にかなり変化して変化します。なぜ私はC#で作成しているこのjavascript変数は一度更新されますか?

だから、私のイベントハンドラは、これだけをやっている...

int scale = (int)myObject.Scale; 
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JSVariables", "scale=" + scale, true); 

それから私は、私は単純に値を警告するイベントハンドラを持っている私のJSを持っています。

alert(scale); 

問題が発生するのは、イベントが発生した最初のときだけです。イベントが発生するたびにC#コードをステップ実行し、RegisterClientScriptBlockが呼び出され、そのスケールが実際に異なる値を取得していることがわかります。

この値を一定にしないにはどうすればよいですか? RegisterClientScriptBlock行に到達するたびに、新しい値がJSスケール変数にロードされるはずですが、最初はそのまま残っています。何か案は?

答えて

2

RegisterClientScriptBlockは、タイプ(this.GetType())とキー("JSVariables")でスクリプトを登録します。次回、同じ実行スタック内でRegisterClientScriptBlockが呼び出されると、そのタイプとキーのスクリプトがすでに登録されているかどうかがチェックされ、登録されている場合は何も行われません。

この目的は、重複する共有スクリプトを排除することです。 5つのコントロールがすべて共有JavaScriptのインクルードに依存している場合は、そのページに1回のみインクルードします。したがって、すべてのコントロールは、同じインクルード関数とキーを呼び出すことができ、複数回含まれないようにします。

1

Rex氏に加えて、ASP.NET Ajaxを使用している場合、これらの値を部分ポストバック間で更新する場合は、ScriptClientでRegisterClientScriptメソッドを使用する必要があります。やって

関連する問題