none
[ASP.NET MVC2]コントーラ間でモデルデータを共有したい RRS feed

  • 質問

  • 環境:[Windows Vista SP1, VisualStudio 2010 Pro]

    Webの仕組みを考えれば難しいことは承知しています。

    一方のコントローラで取得したデータをもう一方から参照することは可能なのでしょうか?

     

    2011年3月19日 1:45

回答

  • totojoさん、小野@どっとねっとふぁんさん ありがとうございます。

    返事が遅くなってすいません。


    少し誤解を与える表現をしたかもしれません。

    現在、ビューからコントローラのアクションを呼び出して、アクション内で取得したデータをモデルに格納しています。
    そしてもう一度アクションを呼び出すと、先ほど取得したデータが消えていました。
    当初、同じクラスのメソッドを呼び直しているだけなのにどーして?!と思っていました。

    その後、少し勉強した結果、HTTPはステートレスであるため、
    サーバーはレスポンスを返した段階で処理が完結し、その間の状態やデータは失われるということがわかりました。
    2回目にアクションを実行したコントローラは1回目とは別のインスタンスだということですね。

    で、ここまでわかって、
    じゃぁ、先ほど(コストをかけて)取得したデータを利用したい場合はどうすべきなのかという疑問が浮かびました。

    ・取得したデータをDBに格納して取り出す
    というは、クライアントごとのデータと考えるとまずいので
    ・Session 変数を使う
    ・hidden フィールドを使ってクライアントに値を返し、クライアントから値を送ってもらう
    という考え方を参考にしたいと思います。

    ありがとうございました。


    • 回答としてマーク NZ-000 2011年3月25日 8:05
    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
    2011年3月19日 7:41
  • 何をどのようにやりたいのかがわかりませんが。

    普通に取得したデータをDBに格納して取り出すという方法じゃだめなんでしょうか?

     


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年3月22日 7:05
  • totojoさん、小野@どっとねっとふぁんさん ありがとうございます。

    返事が遅くなってすいません。


    少し誤解を与える表現をしたかもしれません。

    現在、ビューからコントローラのアクションを呼び出して、アクション内で取得したデータをモデルに格納しています。
    そしてもう一度アクションを呼び出すと、先ほど取得したデータが消えていました。
    当初、同じクラスのメソッドを呼び直しているだけなのにどーして?!と思っていました。

    その後、少し勉強した結果、HTTPはステートレスであるため、
    サーバーはレスポンスを返した段階で処理が完結し、その間の状態やデータは失われるということがわかりました。
    2回目にアクションを実行したコントローラは1回目とは別のインスタンスだということですね。

    で、ここまでわかって、
    じゃぁ、先ほど(コストをかけて)取得したデータを利用したい場合はどうすべきなのかという疑問が浮かびました。

    ・取得したデータをDBに格納して取り出す
    というは、クライアントごとのデータと考えるとまずいので
    ・Session 変数を使う
    ・hidden フィールドを使ってクライアントに値を返し、クライアントから値を送ってもらう
    という考え方を参考にしたいと思います。

    ありがとうございました。


    • 回答としてマーク NZ-000 2011年3月25日 8:05
    2011年3月25日 8:05