在我的 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(使用前将#替换为@)