- - PR -
ASP.NETでグローバル変数
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-05-12 19:52
こんにちはASP.NETを本日から勉強し始めました。
Dim p_A(10) As ArrayList Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer For i = 1 To 10 p_A(i) = New ArrayList() p_A(i).Add("AAA") p_A(i).Add("BBB") Next End sub Private Sub list1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles list1.SelectedIndexChanged Me.Text1.text = p_A(1).Text End Sub Private Sub list2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles list2.SelectedIndexChanged Me.Text1.text = p_A(2) End Sub としてデバッグするとLoadイベントを抜けるとp_A()がNothingとなってしまいます。 ASP.NETではフォーム内で使用するグロバール変数はどこで定義すればよいのでしょうか? そもそもグローバル変数を使う以外でもっと一般的なやり方がWEBの世界ではあるのでしょうか? | ||||
|
投稿日時: 2003-05-13 09:49
こんにちは!
ASP.NETを勉強し始めて2ヶ月足らずですが、私も最初に ブチ当った壁がこのグローバル変数でした。 一般的なやり方かどうか分りませんが、私は下記のようにしました。 Shared 変数A As 属性…@ Friend Shared 変数B As 属性…A @のように定義すると定義したWEBフォーム内でのみ有効な共通変数として使用でき、 Aのように定義すると複数のWEBフォーム間で使用できます。 FormA内部でAのように定義した変数BをFormBで参照する場合には FormB.変数Bという具合に明示的に記述して使っています。 複数のWEBフォーム間の共通変数の定義の仕方が他にもあれば 私もご教示願いたいです。 | ||||
|
投稿日時: 2003-05-13 09:52
やっちまいました!
事故レスです。^^; <誤> FormA内部でAのように定義した変数BをFormBで参照する場合には FormB.変数Bという具合に明示的に記述して使っています。 ↓ <正> FormA内部でAのように定義した変数BをFormBで参照する場合には FormA.変数Bという具合に明示的に記述して使っています。 です。 | ||||
|
投稿日時: 2003-05-13 10:47
moondog様返答ありがとうございます。
ほんとだ。。dimで定義してた共通変数をSharedに書き換えただけで動作してしまいました。 すごい。。 昨日から関連の情報調べてみたのですが、 ViewStateを使うのが一般的なのかなと思いました。 値を代入する側で viewstate("viw_p_A") = p_A 保存した内容を取り出す時にオブジェクトをキャストして Dim arrvalb As New ArrayList(CType(viewstate("viw_p_A"), ArrayList)) とやったのですが、このキャストでエラーとなってしまいました。 大変そうだな。。と思ってた矢先にコメントがあったので非常に助かりました。 ありがとうございました。(でも何になったんエラーなんだろうな。。) >複数のWEBフォーム間の共通変数の定義の仕方が他にもあれば >私もご教示願いたいです。 この手の情報少ないです。。私も知りたいです! | ||||
|
投稿日時: 2003-05-13 12:51
ArrayListに引数にArrayListをとるコンストラクタが存在しないからです。 これをやるなら Dim arrvalb As ArrayList = CType(viewstate("viw_p_A"), ArrayList) でしょう。 | ||||
|
投稿日時: 2003-05-13 16:14
なると様ありがとうございます。
なるほど。。言われてみると納得します。 ありがとうございました。 | ||||
|
投稿日時: 2003-05-13 16:49
複数のWebフォーム間で同一のデータを利用したい場合は アプリケーションオブジェクトやセッションオブジェクトを 利用するのが基本です。 共通変数の挙動について十分に理解して利用しているのなら いいのですが、一般的にははまる原因になるかと思います。 #アクセスしてるユーザがちがっても同じ値が使われちゃうし。 | ||||
|
投稿日時: 2003-05-13 21:05
===>shu様
こんにちは! >#アクセスしてるユーザがちがっても同じ値が使われちゃうし。 ドキッ! ということは、複数ユーザが同時に同じフォーム開いてたり すると、変数の値の整合性が崩れたりするんでしょうか? 今作ってるアプリもセッション変数への置き換えを考えた方が よさそうな予感…^^; |
1