2009-08-21 103 views
8

我有一個場景,我在一個視圖頁面上,並調用控制器A中的一個操作方法,通過RedirectToAction返回調用控制器B中的另一個操作,並且此操作返回已在上面的視圖。RedirectToAction不刷新頁面

我希望頁面刷新以反映這兩個操作所做的對系統狀態的更新,但是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個不同的控制器中? – 2009-08-21 08:31:28

+0

按照您的要求添加了代碼。謝謝大衛 – Dan 2009-08-21 09:30:14

+0

嗯,是的懷疑沒有什麼奇怪的。請看下面你對我的回答的看法... – 2009-08-21 11:06:03

回答

0

我將是一個有點模糊這裏,因爲我真的不知道,但我見過的東西沿着這些路線之前(而不是別人接聽)。可能的問題是更新事務在重定向之前尚未處理或刷新。例如NHibernate有時會等待提交更新到db,直到我認爲處理完響應之後。

如果是這種情況,那麼無論您在控制器A中執行什麼操作,都只是無法獲取更改。也許你可以嘗試以某種方式強制數據庫提交進行處理。

對不起,但那是我能想到的唯一可能性。你必須穿上你的谷歌裝備和頭帶!

+0

不幸的是,這不是問題。我的ORM已經完成了所有的工作,並且在這兩種情況下都會出現其他客戶端位。 – Dan 2009-08-21 12:51:21

+0

哦:-(如果你真的被困住了,你可以嘗試一個Response.Redirect(Request.Url.ToString()),但如果這樣做的話,那麼它是一個解決方法和一個混亂的。 – 2009-08-21 13:21:57

0

我在我的項目上有這樣的問題。可能發生的事情,我假設你是在ActionInControllerB中更新你的視圖,然後當你RedirectToAction它正在清除該視圖。我有一個像這樣的問題,我沒有在我的GET:控制器中更新,只是在POST:控制器中更新。因此,我想展示的東西沒有出現。所以我建議你確保你對顯示的改變發生在正確的地方。

我對MVC相當新,所以我可能會誤解你的問題,如果我是,對不起。但是,我希望這至少能幫助你一點。

7

我猜你正在運行緩存問題。

裝飾你ActionInControllerB和ActionInControllerA方法有:

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

我有類似的問題,但它從視圖文件到控制器文件ajax調用啓動。控制器更新了數據庫,然後調用RedirecToAction以刷新視圖。但沒有刷新... 上面的答案都沒有幫助我。我能解決的唯一途徑是通過使用不同的方法來調用視圖文件的操作:

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

從這一點來說一切擔任我預料到了。