2011-08-11 154 views
2

從一些操作方法中,我想返回一個將強制刷新當前頁面的結果。actionresult刷新當前頁面

我寫了這個獲得這樣的結果:

public class RefreshResult : ActionResult { 

     public override void ExecuteResult(ControllerContext context) { 
      Uri referrer = context.HttpContext.Request.UrlReferrer; 
      if(referrer == null || string.IsNullOrEmpty(referrer.AbsoluteUri)) { 
       return; 
      } 
      context.HttpContext.Response.Redirect(referrer.AbsoluteUri); 
     } 
    } 

在我的操作方法我乾脆返回新RefreshResult。它有效,但我很好奇這種方法可能存在的侷限性。我不願意給客戶一個訪問直接返回這些結果的動作方法的選項,所以我認爲我總是能夠以這種方式刷新當前頁面。我對嗎?

我發現這個(和其他幾個問題)上的計算器: ActionResult return to page that called it

但我在這樣的方法可能存在的限制更多intrested,而不是在「如何」。

Thanx提前

+0

爲什麼不乾脆用RedirectResult? –

+0

實際上我使用的是RedirectToRouteResult,但我不喜歡我需要爲它提供路由值。與refreshresult我不需要知道url重定向。 – objectbox

+0

我不明白你的意見。在你的代碼中,你重定向到一個URL RedirectResult接受一個url即返回新的RedirectResult(referrer.AbsoluteUri);會做的伎倆,無需創建一個新的類,這是我的觀點 –

回答

2

我不知道你是什麼意思「的結果,這將迫使當前頁面刷新」的意思。如果您正在服務器上執行操作,則您已在「刷新」該頁面。

如果你想要的是某種類型的post-redirect-get模式,以便通過GET操作再次「登陸」原始頁面,這很容易 - 只需實現從RedirectToRouteResult派生的自定義ActionResult(由RedirectToAction使用()方法),併爲其提供當前路由值。

您的基於引用鏈接的方法並不完全錯誤,但請記住,引用鏈接是由瀏覽器發送的標頭,並且可以通過某些客戶端的可選(瀏覽器中禁用等),而當前路由值始終可供您使用。

1

rouen answer是刷新頁面的一種方法。另一個是重定向到發送請求的Url,並且不需要自己編寫實現,只需在控制器的正常操作中執行即可。

行動可能看起來像這樣

public ActionResult SomeAction() 
{ 
    //do some work here... 

    return Redirect(Request.UrlReferrer.ToString()); 
}