2012-01-18 18 views
0

私のビューにはgetメソッドとpostメソッドがあり、getメソッドではいくつかのViewDataオブジェクトの値を設定します。しかし、postメソッドを呼び出すと、これらのViewDataオブジェクトはnullになります。投稿方法でリセットする必要がありますか?ここに私のコードは次のとおりです。投稿全体でViewDataを使用しています

public ActionResult Index() 
    { 
     ViewData["afceaststandings"] = GetStandingsForGrid("2017", "AFC East"); 
     ViewData["afccentralstandings"] = GetStandingsForGrid("2017", "AFC Central"); 
     ViewData["afcweststandings"] = GetStandingsForGrid("2017", "AFC West"); 

     return View("Index"); 
    } 

[HttpPost] 
    public ActionResult Index(QBRating qbm) 
    { 
     if (ModelState.IsValid) 
     { 
      string Result; 
      double dblResult; 

      qbm.Completion = ((qbm.Completion - 30) * 0.05); 

      if (qbm.Completion < 0) 
      { 
       qbm.Completion = 0; 
      } 

      if (qbm.Completion > 2.375) 
      { 
       qbm.Completion = 2.375; 
      } 

      qbm.Gain = ((qbm.Gain - 3) * 0.25); 

      if (qbm.Gain < 0) 
      { 
       qbm.Gain = 0; 
      } 

      if (qbm.Gain > 2.375) 
      { 
       qbm.Gain = 2.375; 
      } 

      qbm.Touchdown = (qbm.Touchdown * 0.2); 

      if (qbm.Touchdown > 2.375) 
      { 
       qbm.Touchdown = 2.375; 
      } 

      qbm.Interception = (2.375 - (qbm.Interception * 0.25)); 

      if (qbm.Interception < 0) 
      { 
       qbm.Interception = 0; 
      } 

      dblResult = Math.Round((((qbm.Completion + qbm.Gain + qbm.Touchdown + qbm.Interception)/6) * 100), 2); 

      Result = "QB Rating = " + Convert.ToString(dblResult); 

      TempData["QBRating"] = Result; 
     } 

     //invalid - redisplay form with errors 
     return View(qbm); 
    } 

答えて

1

ViewDataが要求間で永続化されていないようはい、値があなたのPOSTのコントローラのアクションにViewDataに再割り当てする必要があります。

TempDataを使用すると、要求のデータを保持できます(次回アクセスするまでViewDataに保持されます)。デフォルトのITempDataProviderSessionStateTempDataProvider)はSessionStateを使用しているため、使用しているセッションストアの種類によっては、TempDataに入れている項目がシリアライズ可能である必要があります。

+0

ほとんどの場合、TempDataは事実上役に立たないと感じます。 TempDataで何かを設定すると、次のページに表示されます。しかし、ユーザーがページを更新すると、そのページは消えてしまいます。したがって、これは1回だけのショットです。 –

+0

@MystereMan TempDataは、POSTコントローラアクションで何らかの操作を実行した後に別のアクションにリダイレクトし、この場合はGETリクエストからPOSTリクエストまでのデータしか保持しない場合に便利です。ユーザーがPOST要求をしなくてGET経由で別の場所に移動した場合は、TempDataのデータを削除することをお勧めします。 –

+0

本当に、私はPRGがそのために有効であると思います。しかし、他のほとんどのケースでは、私はリフレッシュの制限のために非常に有用であるとは思わない。しかし、私の理解では、TempDataは次回アクセスするまでそのデータを保持するようになりました。つまり、セッションが終了するまでTempDataに移動しても移動します。 –

0

はい。 ViewDataオブジェクトは、1つの要求の存続期間中にのみ存在します。したがって、各要求は必要な変数を再設定する必要があります。

関連する問題