2

私はMVC3を初めて使用し、1つのアクションを持つコントローラーを持っています。コントローラークラスでいくつかのグローバルプロパティを定義し、アクションメソッドでそれらのプロパティに値を割り当てました。元:

  public class RosterController : Controller
   {
   int var1;
   int var2;
   int var3;
   public ActionResult Index(int param1)
   {
      if(param1 ==1)
      {
         return view(newRosterViewModel(var1+1,var2+2,var3+3));
      }
      else
      {
         var1=1;
         var2=2;
         var3=3;
         return view(newRosterViewModel(var1,var2,var3));
      }
      }
   } 

var1このコードでは、初めて、、、に値を割り当てvar2ますvar3。2回目はこれらの値が必要ですが、値はnullです。

TempDataを試してみましたが、それも価値がありません。

4

4 に答える 4

2

ただし、値は null です。

それらの値は 0 (ゼロ) であることがわかると思います。これは整数フィールドの既定値です。

にマップされたすべてのリクエストによりRosterController、 の新しいインスタンスRosterController作成されます。これにより、同時リクエストがコントローラの状態を混同するという問題が回避されます。

あるリクエストから別のリクエストに情報を永続化するには、多くのオプション (データベース、セッション、Cookie、アプリケーションなど) がありますが、コントローラー インスタンスの状態はそれらの 1 つではありません。リクエスト間で永続化するための正しいアプローチは、要件によって異なります。

于 2012-11-09T08:43:02.240 に答える
1

それらを静的にしないのはなぜですか?

private static int var1;

またはキャッシュまたはセッションを使用する

HttpRuntime.Cache.Add("var1", value);

var var1= HttpRuntime.Cache.Get("var1");
于 2012-11-09T08:42:40.853 に答える
1

変数を静的にすることができます。変数を静的にするということは、その寿命がプログラムの実行全体に及ぶことを意味します。

このように static を宣言します

private static int var1;
private static int var2;
private static int var3;

ただし、最初に正確なユースケースを教えてください

于 2012-11-09T08:47:09.993 に答える
0

ビューをレンダリングするときは、この変数をコントローラーに再度渡す必要があります。これは、リクエストごとにコントローラーが再作成されるためです。

public class RosterController : Controller
{
int var1 = 0;
int var2 = 0;
int var3 = 0;
public ActionResult Index(int param1, int var1, int var2, int var3)
{
  if(param1 ==1)
  {
     return view(newRosterViewModel(var1+1,var2+2,var3+3));
  }
  else
  {
     var1=1;
     var2=2;
     var3=3;
     return view(newRosterViewModel(var1,var2,var3));
  }
  }
}
于 2012-11-09T12:23:52.293 に答える