2011-08-11 210 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()); 
}