2011-12-17 17 views
5

ここで私のMVCコードで何が間違っていますか?インデックスビューには、自分自身に送信するフォームが含まれています。私が望むものは、送信されたフォームを処理してからビューに戻るコントローラです。実際に何が起こるRedirectToActionはページを期待どおりにリフレッシュしません

は、フォームが正しく処理されているが、返されたビューは何も(まだ表示され削除されている、例えばID)を起こらなかったかのようです。手動でページを更新すると、正しく表示されます。私は、それが別のコントローラから同じビューにリダイレクトがうまく動作するので、それがbroswerキャッシング関連ではないと思う。どうすれば修正できますか?

public ViewResult Index() 
    { 
     return View(GetComments()); 
    } 


    [HttpPost] 
    public ActionResult Index(int[] AllIds) 
    { 
     if (AllIds != null) 
     { 
      foreach (int id in AllIds) 
      { 
       // do stuff 
      } 
     } 

     return RedirectToAction("Index"); 
    } 

編集:フォームを送信すると、最初のメソッドにブレークポイントがヒットしないと「(F11)ステップイン」しようとしているreturn RedirectToAction("Index");ラインはだけではなく、最終的}上にまっすぐに移動します。

+0

したがって、POSTはGetComments()によって取得されたデータを更新しますか? POSTの後、GetComments()は別のデータを返す必要がありますか? – danludwig

+0

はい、POSTの更新は/ GETの選択と同じデータを削除します。 – mikel

答えて

4

は、Firefox用のバイオリンやFirebugのをインストールし、トラフィックを見て、それは本当に新しい応答またはブラウザ(キャッシュされたページ)からHTTP 304を返し、それを参照してください。すべてがチェックアウトしたら、db永続性および/またはクエリに問題があります。

1

これを試しましたか?私は、サーバーが応答を返すまで保存されていない場合は、データを保持する方法に応じて、疑問に思っています..?

public ViewResult Index() 
{ // breakpoint 
    var comments = GetComments(); // debug and inspect the value of this variable 
    return View(comments); 
} 


[HttpPost] 
public ActionResult Index(int[] AllIds) 
{ 
    if (AllIds != null) 
    { 
     foreach (int id in AllIds) 
     { 
      // do stuff 
     } 
    } 

    return RedirectToAction("Index"); // breakpoint 
} 

私は何人かの人々は唯一のSaveChangesを呼び出す/リクエストの終了時にORMにコミットすることをMVCでIUnitOfWorkを使用して知っています。アイテムがコレクションからアイテムを削除する可能性はありますが、GET Index()が返されるまではDBに保持されませんか?

更新

代わりのリターンRedirectToAction("Index")は、あなたがRedirectToAction(Index())を試してみましたか?

0

は、同様にコントローラ名を入力してみてください。それが私を助けました。例:

return RedirectToAction("Index","Home"); 
関連する問題