MVC3 RedirectToAction在post方法和ViewBag抑制中

我目前正在处理一个数据列表,我需要在一个视图中显示一个列表,并为每个项目显示可以执行的相应操作,例如编辑或删除它们。 对于版本,没有任何问题,这是一个特殊的观点。 我的问题是当我想删除一个项目时,我在post方法中有两个选择。

//Call directly the list [HttpPost] [Authorize] public ActionResult Delete(int itemId) { // logic to delete an item ViewBag.Error = ""; // The result of the execution return List(); } 

这个解决方案的问题是url不再与第一个相同:… / List,它是… /现在删除,我发现这个解决方案不太好,另一个解决方案是重定向到动作,现在url很好,但viewBag中的错误信息不再可见,你们有更好的主意吗?

您可以使用TempData在一个请求中保留信息,它适用于这个确切的用例。 而不是使用ViewBag使用TempData["Error"] = ""; 代替。 然后,在接收端,您将有一个如下所示的代码段:

 [HttpGet] public ActionResult List() { ViewBag.Error = TempData["Error"]; // ... return View(); } 

请参阅ASP.NET TempData在请求之间保持不变以及何时在ASP.Net MVC 3中使用ViewBag,ViewData或TempData 。

如果您正在进行重定向,请尝试使用TempData而不是ViewBag 。 TempData是一个字典,用于在下一页请求之前保留用户会话中的键/值。 在你的控制器中:

 TempData["Error"] = "A message goes here"; 

在列表视图中,您要重定向到:

 @TempData["Error"] 

或者如果你不使用razor:

 <%= TempData["Error"] %> 

使用ViewBag POST ActionResult

 ActionResult SubmitUser() { ViewBag.Msg =TempData["Msg"]; return view(); } [HtttpPost] ActionResult SubmitUser() { TempData["Msg"] ="Submitted Successfully"]; return view(); }