トップ回答者
[ASP.NET MVC2]コントーラ間でモデルデータを共有したい

質問
回答
-
totojoさん、小野@どっとねっとふぁんさん ありがとうございます。
返事が遅くなってすいません。
少し誤解を与える表現をしたかもしれません。
現在、ビューからコントローラのアクションを呼び出して、アクション内で取得したデータをモデルに格納しています。
そしてもう一度アクションを呼び出すと、先ほど取得したデータが消えていました。
当初、同じクラスのメソッドを呼び直しているだけなのにどーして?!と思っていました。
その後、少し勉強した結果、HTTPはステートレスであるため、
サーバーはレスポンスを返した段階で処理が完結し、その間の状態やデータは失われるということがわかりました。
2回目にアクションを実行したコントローラは1回目とは別のインスタンスだということですね。
で、ここまでわかって、
じゃぁ、先ほど(コストをかけて)取得したデータを利用したい場合はどうすべきなのかという疑問が浮かびました。
・取得したデータをDBに格納して取り出す
というは、クライアントごとのデータと考えるとまずいので
・Session 変数を使う
・hidden フィールドを使ってクライアントに値を返し、クライアントから値を送ってもらう
という考え方を参考にしたいと思います。
ありがとうございました。
- 回答としてマーク NZ-000 2011年3月25日 8:05
すべての返信
-
ASP.NET MVC といえども一般的な ASP.NET の仕組みと同じでいいと思います。
2つの HTTP リクエストの間で値を受け渡したいと考えれば、
・Session 変数を使う
・hidden フィールドを使ってクライアントに値を返し、クライアントから値を送ってもらう
などといった方法が考えられると思います。
Web サーバーの性能やら回線の太さなどによって実装方法は変わってくると思いますが。
参考:
Controller.Session プロパティ (System.Web.Mvc)
http://msdn.microsoft.com/ja-jp/library/system.web.mvc.controller.session.aspx -
totojoさん、小野@どっとねっとふぁんさん ありがとうございます。
返事が遅くなってすいません。
少し誤解を与える表現をしたかもしれません。
現在、ビューからコントローラのアクションを呼び出して、アクション内で取得したデータをモデルに格納しています。
そしてもう一度アクションを呼び出すと、先ほど取得したデータが消えていました。
当初、同じクラスのメソッドを呼び直しているだけなのにどーして?!と思っていました。
その後、少し勉強した結果、HTTPはステートレスであるため、
サーバーはレスポンスを返した段階で処理が完結し、その間の状態やデータは失われるということがわかりました。
2回目にアクションを実行したコントローラは1回目とは別のインスタンスだということですね。
で、ここまでわかって、
じゃぁ、先ほど(コストをかけて)取得したデータを利用したい場合はどうすべきなのかという疑問が浮かびました。
・取得したデータをDBに格納して取り出す
というは、クライアントごとのデータと考えるとまずいので
・Session 変数を使う
・hidden フィールドを使ってクライアントに値を返し、クライアントから値を送ってもらう
という考え方を参考にしたいと思います。
ありがとうございました。
- 回答としてマーク NZ-000 2011年3月25日 8:05