在我的C# .NET 4 MVC 3应用程序中,我有一个删除控制器用于一组CRUD页面,它使用Post Redirect Get模式在成功删除后重定向到Index控制器。如果此页面不是由这样的操作重定向而来,我想在Index页面上呈现一个按钮。是否有一种简单的方法来检测当前页面是否被重定向(即作为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 后,我的当前方法是在
DeleteMyEntity
方法成功后,在我的删除控制器中使用TempData
设置此选项: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);
}
然后在我的 Index 控制器中,我会检查这个值是否存在且为 true:
if (TempData["Redirected"] != null)
{
//we can then do something useful with this
}
我看到的另一个机会是向args
添加另一项,并在控制器中进行检查,但在这种情况下,我可能只需使用TempData
。是否有一种方法可以在请求上使用HTTP响应代码来完成此操作,而无需通过TempData
或类似机制传递这些数据?
HttpContext.Current.Request.Headers
中读取referer
头的值,但这取决于客户端浏览器的良好行为。TempData
基本上是为这种情况设计的,听起来是你最好的选择。 - sargant