MVC3 RedirectToAction in a post method and ViewBag suppression

Oflocet picture Oflocet · Apr 12, 2012 · Viewed 15.9k times · Source

i'm currently working a list of data that i need to display in a view that represent a list and show for each item the corresponding action that can be executed, like edit them or delete them. For the edition there is no problem concedering that it's a particular view. My problem is when i want to delete an item, i have two choices in the post method.

 //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(); 
 }

The thing with this solution is that the url is no longer the same as the first one : .../List, it's .../Delete now, i don't find this solution great, the other solution is to redirect to the action, now the url is good, but the error message in the viewBag is no longer visible, Do you guys have some better idea.

Answer

Joshua picture Joshua · Apr 12, 2012

You can use TempData to persist information across one request and it was meant for this exact use case. Rather than use the ViewBag use TempData["Error"] = ""; instead. Then, on the receiving end you would have a snippet like the following:

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

See ASP.NET TempData persists between requests and When to use ViewBag, ViewData, or TempData in ASP.Net MVC 3.