電子書籍の厳選無料作品が豊富!

いつも大変にお世話になります。

今作っているASP.NET MVC3 Webアプリケーションで、複数のコントローラから呼び出される、共通のクラスとメソッドを作っています。
その中から、コントローラ(具体的にはセッション情報)に値をセットしたいです。

すごく単純化しますと、コントローラがHomeControllerとMemberControllerとして、
public WorkerService
{
 public SetSessionValue(???){
  // 呼び出し元がHomeControllerなら、Session["HomeDt"]に日付をセット
  // 呼び出し元がMemberControllerなら、Session["MemberDt"]に日付をセット
 }
}
ていうメソッドを呼び出しています。
英文の記事を見て、ControllerContextという静的クラスを使えばいいのは感覚的にわかったのですが、具体的なコーディングとなるとさっぱりです。

これができると、何かMVCでも光が見えそうな気がします。現在はお先真っ暗ですが。
どなたか教えてやっていただけないでしょうか。お願いします。

A 回答 (2件)

呼び出し元の判別は呼び出し方でなんとかするとして。


現在のSession変数への値のセットは HttpContext.Current.Session["変数名"] に値をセットすることで可能です。
まぁ、MVCらしい書き方ではないので他に方法はありそうな気はしますが。

あと、メソッドをstaticにしてしまうと(内部で値を保持しないように気をつける必要はありますが)呼び出しが楽かも。
    • good
    • 0
この回答へのお礼

HttpContext.Current.Session["変数名"]で完全に制御できました!
ControllerContextではなく、HttpContextだったんですね。。

他にも、ControllerContext.Currentは必要な情報の宝庫ですね。
もっと早く質問すれば良かったです。
本当にありがとうございました!

お礼日時:2012/12/28 16:37

どこで聞いた話か知らないけど、ControllerContextは、コントーローラの挙動をテストする際、クラスの初期化時にコントロールの状態をセットする、DependencyInjection(依存性注入)手法で使われるクラスでは。



また、ControllerContextは静的クラスではないよ。
サービスクラス中に、var context = new ControllerContext();とやっても、値はnullのままで、そのcontextにRequestやHttpContextをセットして、それでControllerを初期化し、テストを進めます。
(すいません。自分もまだ一部しか使ってない)

セッションの値を読み書きしたいなら、#1でonosさんのおっしゃる通り、HttpContext.currentで現在の状態を取得するのが正解です。
    • good
    • 0
この回答へのお礼

聞きかじりで一方的に理解していました。申し訳ありません(赤面
shockatzさんのおっしゃった、"dependency injection"というのを調べていて、ううう。。何か凄く深いです。
とりあえず今回はonos様にBA差し上げますが、shockatz様にも同じくらい感謝しております。
ありがとうございました!

お礼日時:2012/12/28 16:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!