ASP.NET MVC 3 - 检测当前页面是否在重定向后获取工作流中重定向到

2024-01-01

在我的 C# .NET 4 MVC 3 应用程序中,我有一个用于一组 CRUD 页面的删除控制器,该控制器使用重定向后获取成功删除后重定向到索引控制器的模式。仅当此页面未通过此类操作重定向到时,我才想在索引页面上呈现一个按钮。有没有一种简单的方法来检测当前页面是否被重定向到(即由于 PRG 重定向而到达)?

看完之后http://blog.simonlovely.com/archive/2008/11/26/post-redirect-get-pattern-in-mvc.aspx http://blog.simonlovely.com/archive/2008/11/26/post-redirect-get-pattern-in-mvc.aspx我当前的方法是在我的删除控制器中设置它TempData之后DeleteMyEntity方法已成功:

try {
    MyService.DeleteMyEntity(MyViewModel.MyEntity);
    TempData["Redirected"] = true;
    args = new RouteValueDictionary(new { Foo = 1, Baa = 2 });
    return RedirectToAction("Index", args);
} catch (Exception e)
{
   //Logging etc. - redirect should never be reached on exception (and TempData item not set)
   throw(e);
}

然后在我的索引控制器中检查该值是否存在并且为真:

if (TempData["Redirected"] != null)
{
    //we can then do something useful with this
}

我看到的另一个机会是添加另一个项目args并在控制器中检查这一点,但在这种情况下我也可以使用TempData。有没有办法在请求上使用 HTTP 响应代码来执行此操作,而无需使用此数据传递TempData或者类似的机制?


另一种方法是设置一个全局动作过滤器,为您“注入”该标志......

public class RedirectDetect: ActionFilterAttribute{
   public override void OnActionExecuted(ActionExecutedContext filterContext){
        if (filterContext.Result is RedirectToRouteResult ||
            filterContext.Result is RedirectResult)
        {
             TempData["Redirected"] = true;
             //or what ever other indicator you want to set
        }
   }
}

然后你可以调用redirectToAction(“Index”)然后检查你的接收处理程序

旁注:我挑战你大声说出“RedirectDetect”并且不要傻笑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 3 - 检测当前页面是否在重定向后获取工作流中重定向到 的相关文章

随机推荐