2009-08-21 15 views
8

私はビューページにあり、コントローラAのアクションメソッドを呼び出すシナリオを持っています。このメソッドは、コントローラBの別のアクションをRedirectToActionリターンで呼び出すため、このアクションはImが既に表示されているビューを返します。RedirectToActionはページを更新しません

これらの2つのアクションが行ったシステム状態の更新を反映するようにページを更新したいのですが、MVCは同じビューに戻っているときにページを更新する必要がないと判断したようです。リフレッシュを強制するにはどうすればよいですか?

例:

//user is on A/index, and submits a form that calls this in contoller B 
public ActionResult ActionInControllerB() 
{ 
    //do stuff 
    return RedirectToAction(ActionNames. ActionInControllerA, ControllerNames.A); 
} 

public ActionResult ActionInControllerA() 
{ 
    //do stuff 
    return View("index"); 
} 
+0

あなたがしていることは妥当であると思いますし、結果は意味をなさないものです。 2つの異なるコントローラに2つのメソッドのコードを貼り付けることができますか? –

+0

あなたが質問したときにコードが追加されました。ありがとうDavid – Dan

+0

うーん、奇妙な何もそこに疑わしい。あなたが私の答えを下にどのように考えるかを見てください... –

答えて

0

私は本当にわからないが、私は前に、これらの線に沿って何かを見てきました(と誰もが答えるされていない)ので、私は、ここで少し曖昧であることを行っています。その問題は、リダイレクトの前に更新トランザクションがまだ処理されていないか、フラッシュされていない可能性があります。例えば、NHibernateは、応答が処理された後に思ってしまうまで、DBへの更新をコミットするのを待つことがあります。

これが当てはまる場合、コントローラAで行うフェッチは、変更を取り上げるだけではありません。たぶんあなたは何らかの形でデータベースコミットを処理させるように試みることができます。

申し訳ありませんが、私が考えることができる唯一の可能性があります。あなたはあなたのgoogle-fuの衣装とヘッドバンドを付けなければならないでしょう!

+0

残念ながら、これは問題ではありません。私のORMはすべての作業を完了しており、どちらの場合にも表示されるはずの他のクライアントサイドビットがあります。 – Dan

+0

oh well :-(もしあなたが本当に立ち往生しているのであれば、Response.Redirect(Request.Url.ToString())を試すことができますが、それが回避策であり、それが乱雑であれば動作します。 –

0

私のプロジェクトではこのような問題が発生しました。何が起きているのでしょうか、私はあなたがActionInControllerBであなたのビューを更新していると仮定しています。そしてRedirectToActionがそのビューをクリアしているときです。私はGET:コントローラで更新していなかったこのような問題があり、POST:コントローラでのみ更新していました。それで、私が表示したかったものは出てこなかった。ですから、ディスプレイの変更が適切な場所で行われていることを確認することをお勧めします。

私はかなり新しいMVCですので、私はちょうどあなたの質問を誤読することができますし、私は、ごめんなさい。しかし、これはあなたが少なくとも少し助けてくれることを願っています。

7

キャッシングの問題が発生していると思います。

であなたのActionInControllerBとActionInControllerA方法を飾る:

[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)] 
1

私は同様の問題を抱えていたが、それは、コントローラファイルにビューファイルからのAJAX呼び出しから始まりました。コントローラはDBを更新し、ビューをリフレッシュするためにRedirecToActionを呼び出します。しかし、リフレッシュする必要はありません... 上記の回答は私には役に立たなかった。私はすべてが期待どおりに行動したその時点から

window.location = "Experiment/DeleteExperiment?experimentId=" + $("#DeleteExperimentButton").val(); 

:私はそれを解決できる唯一の方法は、ビューファイルからアクションを呼び出すために別の方法を使用していました。

関連する問題