MVC3 RedirectToAction in a post method and ViewBag

2019-02-08 14:47发布

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.

3条回答
淡お忘
2楼-- · 2019-02-08 14:58

If you are doing a redirect, try using TempData instead of ViewBag. TempData is a dictionary that preserves keys/values in the user's session until the next page request. In your controller:

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

In your List view that you are redirecting to:

@TempData["Error"]

Or if you are not using razor:

<%= TempData["Error"] %>
查看更多
再贱就再见
3楼-- · 2019-02-08 15:00

Using ViewBag to POST ActionResult:

ActionResult SubmitUser()
{
    ViewBag.Msg =TempData["Msg"];

    return view();
}

[HtttpPost]
ActionResult SubmitUser()
{
    TempData["Msg"] ="Submitted Successfully"];

    return view();
}
查看更多
beautiful°
4楼-- · 2019-02-08 15:10

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.

查看更多
登录 后发表回答