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