actionresult刷新当前页面

时间:2011-08-11 15:11:02

标签: c# asp.net-mvc 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。它有效,但我很好奇这种方法可能存在的局限性。我没有兴趣为客户提供访问直接返回此类结果的操作方法的选项,因此我认为我总能以这种方式刷新当前页面。我是对的吗?

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

但我对这种方法的可能限制更感兴趣,而不是在"如何"。

提前完成

2 个答案:

答案 0 :(得分:4)

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

行动可能看起来像这样

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

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

答案 1 :(得分:1)

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

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

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