
いつも大変にお世話になります。
今作っているASP.NET MVC3 Webアプリケーションで、複数のコントローラから呼び出される、共通のクラスとメソッドを作っています。
その中から、コントローラ(具体的にはセッション情報)に値をセットしたいです。
すごく単純化しますと、コントローラがHomeControllerとMemberControllerとして、
public WorkerService
{
public SetSessionValue(???){
// 呼び出し元がHomeControllerなら、Session["HomeDt"]に日付をセット
// 呼び出し元がMemberControllerなら、Session["MemberDt"]に日付をセット
}
}
ていうメソッドを呼び出しています。
英文の記事を見て、ControllerContextという静的クラスを使えばいいのは感覚的にわかったのですが、具体的なコーディングとなるとさっぱりです。
これができると、何かMVCでも光が見えそうな気がします。現在はお先真っ暗ですが。
どなたか教えてやっていただけないでしょうか。お願いします。
No.1ベストアンサー
- 回答日時:
呼び出し元の判別は呼び出し方でなんとかするとして。
現在のSession変数への値のセットは HttpContext.Current.Session["変数名"] に値をセットすることで可能です。
まぁ、MVCらしい書き方ではないので他に方法はありそうな気はしますが。
あと、メソッドをstaticにしてしまうと(内部で値を保持しないように気をつける必要はありますが)呼び出しが楽かも。
HttpContext.Current.Session["変数名"]で完全に制御できました!
ControllerContextではなく、HttpContextだったんですね。。
他にも、ControllerContext.Currentは必要な情報の宝庫ですね。
もっと早く質問すれば良かったです。
本当にありがとうございました!
No.2
- 回答日時:
どこで聞いた話か知らないけど、ControllerContextは、コントーローラの挙動をテストする際、クラスの初期化時にコントロールの状態をセットする、DependencyInjection(依存性注入)手法で使われるクラスでは。
また、ControllerContextは静的クラスではないよ。
サービスクラス中に、var context = new ControllerContext();とやっても、値はnullのままで、そのcontextにRequestやHttpContextをセットして、それでControllerを初期化し、テストを進めます。
(すいません。自分もまだ一部しか使ってない)
セッションの値を読み書きしたいなら、#1でonosさんのおっしゃる通り、HttpContext.currentで現在の状態を取得するのが正解です。
聞きかじりで一方的に理解していました。申し訳ありません(赤面
shockatzさんのおっしゃった、"dependency injection"というのを調べていて、ううう。。何か凄く深いです。
とりあえず今回はonos様にBA差し上げますが、shockatz様にも同じくらい感謝しております。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
説明文書でのメソッド・変数の...
-
レコード件数の表示
-
C# 点の描き方をおしえてくだ...
-
Strutsでチェックボックスの値...
-
Javaの関数名が長い?
-
StringBufferからStringへキャ...
-
C# でメソッドに送られてきたOb...
-
スーパークラスからサブクラス...
-
Google Apps Script で getRang...
-
テキストファイルの日付表示
-
別クラスのmainメソッドの実行
-
JFrameのエラーの意味が分かり...
-
Java初心者です。例外のキャッ...
-
public static void main (Stri...
-
interface,extend,implementの...
-
JSPで<SELECT>の中にDBから持っ...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
別クラスのmainメソッドの実行
-
abstract と static を一緒に付...
-
StringBufferからStringへキャ...
-
説明文書でのメソッド・変数の...
-
Java初心者です、エラーの意味...
-
YYYYMMDD書式の日付に対する適...
-
コマンドライン引数のチェック
-
Google Apps Script で getRang...
-
staticのメリット、デメリット
-
メソッドの引数に指定されてい...
-
スーパークラスからサブクラス...
-
return new使用時
-
メソッド宣言の戻り値の型にク...
-
インターフェースについて
-
CSVから読み込んだデータの保持...
-
問題の意味が分かりません
-
JavaからCへ
おすすめ情報