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, it.../Удалить сейчас, я не считаю это решение отличным, другое решение перенаправлять на действие, теперь URL-адрес хорош, но сообщение об ошибке в viewBag больше не видно, у вас есть идея лучше.

Ответ 1

Вы можете использовать TempData для сохранения информации по одному запросу, и это предназначено для этого конкретного варианта использования. Вместо использования ViewBag используйте TempData["Error"] = "";. Затем на принимающей стороне у вас будет фрагмент следующего вида:

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

См. ASP.NET TempData сохраняется между запросами и Когда использовать ViewBag, ViewData или TempData в ASP.Net MVC 3.

Ответ 2

Если вы выполняете перенаправление, попробуйте использовать TempData вместо ViewBag. TempData - это словарь, который сохраняет ключи/значения в сеансе пользователя до следующего запроса страницы. В контроллере:

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

В представлении "Список" вы перенаправляетесь на:

@TempData["Error"]

Или, если вы не используете бритву:

<%= TempData["Error"] %>

Ответ 3

Использование ViewBag для POST ActionResult:

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

    return view();
}

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

    return view();
}