从某些操作方法中,我想返回一个会强制当前页面刷新的结果。
我写这篇文章是为了获得这样的结果:
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
但我对这种方法的可能限制更感兴趣,而不是在"如何"。
提前完成
答案 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>