回答編集履歴

5

追記

2019/01/23 02:22

投稿

退会済みユーザー
answer CHANGED
@@ -24,4 +24,36 @@
24
24
 
25
25
  前のスレッドで kunai さんが提案されていたような Session["code"]["id"] などということをする必要性は一つもなくて、上記のようにすれば十分と思いますけど、いかがですか?
26
26
 
27
- **注:そもそも、単純に Session["code"]["id"] というようなことはできませんが。**
27
+ **注:そもそも、単純に Session["code"]["id"] というようなことはできませんが。**
28
+
29
+ **【追記2】**
30
+
31
+ 下の私の 2019/01/23 10:57 のコメントで「答えを回答欄に追記しておきます」と書きましたが、それを以下に追記します。
32
+
33
+ > ```Session["id"] = TextBox1.Text;``` // SerferOnWww様のご回答ではここで Session["A.aspx.SpecialKeyName"] にするということでしょうか?
34
+
35
+ そのとおりですが、どこか他のページで、誤って同じ "id" という Key(名前)を使って、例えば、
36
+
37
+ ```
38
+ Session["id"] = <別の Object>;
39
+ ```
40
+
41
+ というようなことをして、Key が "id" の Session データが上書きされてしまうというような懸念がなければ、無理にそうする必要はないです。
42
+
43
+ なお、```strId = Session["id"].ToString();``` は Session データを取得しているだけで、上書きされることはありません。
44
+
45
+ ただ、Session は同一 Web アプリ内の複数のページからアクセスできるグローバルなデータ格納領域ですので、誤って削除されたり上書きされたりすることがないように、Key(名前)にはデータを格納したページの名前と何のデータなのかがすぐわかるような名前を付けておくのが望ましいのは確かです。
46
+
47
+ > ```strId = Session["id"].ToString();``` // ←ここで別タブのSession["id"]が上書きされてしまうのでは、と考えました。
48
+
49
+ 上に書いた通り、そのコードは Session データを取得しているだけで、上書きされることはありません。
50
+
51
+ なお、a.aspx で格納したデータは string 型ですので、取得する際は、
52
+
53
+ ```
54
+ strId = (string)Session["id"];
55
+ ```
56
+
57
+ と、キャストを使うのがお勧めです。
58
+
59
+ 格納したデータが int 型なら int にキャスト、double 型なら double にキャストというように。

4

追記&訂正

2019/01/23 02:22

投稿

退会済みユーザー
answer CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  不可能ではないですが無理筋です(正しくないといっても良いかも)。
10
10
 
11
- ASP.NET Web アプリには、セッション間・ページ間でデータを保持する(状態管理という)手段が多々用意されています。(HiddekField はその中に含まれません)
11
+ ASP.NET Web アプリには、セッション間・ページ間でデータを保持する(状態管理という)手段が多々用意されています。(HiddenField はその中に含まれません)
12
12
 
13
13
  今回の質問のケースでは Session またはクエリ文字列を使うべきです。
14
14
 

3

追記&訂正

2019/01/23 01:41

投稿

退会済みユーザー
answer CHANGED
@@ -22,4 +22,6 @@
22
22
 
23
23
  例えば、Session["A.aspx.SpecialKeyName"] というようにするとか。
24
24
 
25
- 前のスレッドで kunai さんが提案されていたような Session["code"]["id"] などということをする必要性は一つもなくて、上記のようにすれば十分と思いますけど、いかがですか?
25
+ 前のスレッドで kunai さんが提案されていたような Session["code"]["id"] などということをする必要性は一つもなくて、上記のようにすれば十分と思いますけど、いかがですか?
26
+
27
+ **注:そもそも、単純に Session["code"]["id"] というようなことはできませんが。**

2

追記

2019/01/23 01:31

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,25 @@
1
- HiddenField を使うというのは何かの勘違いとしか思えません。Session を使いましょう。使えない理由があれば教えてください。
1
+ HiddenField を使うというのは何かの勘違いとしか思えません。Session を使いましょう。使えない理由があれば教えてください。
2
+
3
+ **【追記】**
4
+
5
+ 下の私の 2019/01/23 10:07 のコメントで「レスが長くなるので上の回答欄に追記します」と書きましたが、それを以下に追記します。
6
+
7
+ > 隠蔽するような情報でなければ HiddenField でも良いのかと思っていました。
8
+
9
+ 不可能ではないですが無理筋です(正しくないといっても良いかも)。
10
+
11
+ ASP.NET Web アプリには、セッション間・ページ間でデータを保持する(状態管理という)手段が多々用意されています。(HiddekField はその中に含まれません)
12
+
13
+ 今回の質問のケースでは Session またはクエリ文字列を使うべきです。
14
+
15
+ > 前のスレッドでkunaiさんがご回答してくださったやり方で一旦やってみようと思います。
16
+
17
+ 前のスレッドというのは [https://teratail.com/questions/170163](https://teratail.com/questions/170163) ですよね?
18
+
19
+ そのスレッドで質問者さんが質問欄に書いた手順 1 ~ 4 の手順 3「Page2で変数にSession["id"]の値を入れる」の「入れる」を「取得する」にするだけで良いと思いますけど、何故そうしないのですか?
20
+
21
+ Key(名前)の "id" がダブって上書きされるという懸念があるのですか? であれば、一目で区別できるような明確な違いがある Key(名前)にすれば済むと思いますが。Session には Key(名前)と Value(値)のペアは複数設定可能で、Key(名前)の命名は任意ということは知ってますよね?
22
+
23
+ 例えば、Session["A.aspx.SpecialKeyName"] というようにするとか。
24
+
25
+ 前のスレッドで kunai さんが提案されていたような Session["code"]["id"] などということをする必要性は一つもなくて、上記のようにすれば十分と思いますけど、いかがですか?

1

追記

2019/01/23 01:21

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,1 @@
1
- Session を使いましょう。使えない理由があれば教えてください。
1
+ HiddenField を使うというのは何かの勘違いとしか思えません。Session を使いましょう。使えない理由があれば教えてください。