- - PR -
構造体をSession変数に
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-16 19:24
VB.NET で開発をしています。
類似のスレッドがありましたが長らく回答がないようなので新規で 質問させてください。 構造体を作成し、session変数に設定しましたが 受け取るときに「キャストが有効ではありません」というエラーが発生します。 概要は以下です。 Structureの定義名を myStruct とします。 Session("param_myStruct") = myStruct で設定 同一.aspx内では mySt = CType(Session("param_myStruct") ,myStruct) で正しく取得できるのですが、 別.aspx でエラーが発生します。 このような事象を解決された方のアドバイスがいただければ 助かります。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-09-16 19:40
とりあえず例外が発生するaspxで
Session("param_myStruct")に何が格納されているのかをクイックウォッチで確認してみてはいかがでしょうか。 | ||||||||||||
|
投稿日時: 2005-09-16 19:42
こんにちわ。
何が違うと考えておられますか? 例えば、 実は取得できたときは、同じリクエストの最中だった。 実は二つの aspx は別の Web アプリケーションだ。 実はセッションの保存にデータベースを使っている。 実はバグで値が入っていないだけだ。等。 今出ている情報では少々足りないかと思われます。 もう少し情報をいただけますか。 | ||||||||||||
|
投稿日時: 2005-09-16 19:44
こういうときに問題を解決するためには、"問題がない"部分をどんどん広げていって、"問題がある"部分をどんどん狭めていくと良いです。
"構造体だとだめ"ということは、クラスだと大丈夫ということですよね? 自作の構造体ではなく、Int32ではどうですか? ね、問題のある部分が狭まってきたでしょ。 | ||||||||||||
|
投稿日時: 2005-09-16 20:51
こんばんは、じゃんぬ です。
一応、リンクを貼って欲しいなんて願ってます。
こういう時はまず、キャストしようとしているものに、 どんな値が入っているのか、全メンバみたりするものです。 デバッグするならば、最初にやることだと思います。
null になってません? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-09-20 09:59
ご回答ありがとうございます。
説明不足ですみませんでした。 まず、過去にあった書き込みは以下です。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16877&forum=7 タイトルの問題から派生して発生していますが 今回の問題とは少し違うようでした。 アドバイスをいただいて構造体を構成している変数の値を確認したところ、 各変数に値は格納されていました。 主な処理は以下の通りです。 ======================================================== (ABC01.aspx、ABC02.aspx に記述) '構造体の定義 Public Structure strTest Dim a1 As String Dim a2 As String Dim a3 As String End Structure (ABC01.aspx の記述) 'ボタンを押したときのSub で 構造体に値を設定→構造体をSessionに設定→次のaspxへ Dim te As strTest te.a1 = "a" te.a2 = "2" te.a3 = "3" Session("test") = te Server.Transfer("ABC02.aspx") (ABC02.aspx の記述) Page_Load で Dim w1 As String = Session("test").a1 =受け取ることができる Dim te As strTest te = CType(Session("test"), strTest) =キャストエラー te = Session("test") =もちろんキャストエラー Dim te2 As Object te2 = CType(Session("test"), strTest) =キャストエラー te3 = Session("test") =キャストエラー ======================================================== 構造体の定義を各aspxごとにしているのがよくない?と考え クラスを定義し、同様の処理を行ったところ、問題なく処理できました。 クラスを使うことで今回は対応しようと思いますが 構造体でこのような記述は間違っているのでしょうか? | ||||||||||||
|
投稿日時: 2005-09-20 10:07
追加です。
ただ単に Dim work1 = Session("test") Dim work2 As String = w1.a1 としたところ、 キャストエラーも発生せず、a1 の値も取得できました。 むしろCtypeのキャストは不要ということでしたか? だとしたらたいへん失礼いたしました。。 | ||||||||||||
|
投稿日時: 2005-09-20 10:09
こんにちわ。
ん?ん?それぞれ二つ定義しているという事ですか? 名前空間が違うから定義できているということですか? それは単に同じ名前、同じ定義の「別の型」という事ですからキャストできなくて当然ですね。
という事みたいなので、同じように構造体を定義したらよいだけだと思います。 |