3

从一些操作方法中,我想返回一个强制刷新当前页面的结果。

我写这个来获得这样的结果:

 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。它有效,但我很好奇这种方法可能存在的局限性。我不想让客户选择访问直接返回此类结果的操作方法,所以我认为我总是能够以这种方式刷新当前页面。我对吗?

我在stackoverflow上发现了这个(以及其他几个问题): ActionResult return to page that call it

但我更感兴趣的是这种方法的可能限制,而不是“如何做”。

提前感谢

4

2 回答 2

8

rouen answer是刷新页面的一种方法。另一种是重定向回发送请求的Url,无需自己编写实现,只需在控制器中的正常操作中执行即可。

动作可能看起来像这样

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

    return Redirect(Request.UrlReferrer.ToString());
}
于 2017-08-25T16:47:14.737 回答
2

我不确定“将迫使当前页面刷新的结果”是什么意思。如果您在服务器上执行操作,则您已经在“刷新”页面。

如果您想要的是某种 post-redirect-get 模式,以便再次通过 GET 操作“登陆”原始页面,这很容易 - 只需实现您的自定义 ActionResult 派生自 RedirectToRouteResult (由 RedirectToAction() 方法使用控制器),并为其提供当前路由值。

您基于引荐来源网址的方法并不完全不好,但请记住,引荐来源网址是浏览器发送的标头,并且在某些客户端中可以是可选的(在浏览器中禁用等),而当前路由值始终可供您使用。

于 2011-08-18T12:09:55.803 回答