У меня есть ASP.NET MVC интернет-магазин, как приложение с двумя видами:Pass сообщение о перенаправлении для просмотра в ASP.NET MVC
- страница предмета (фото, описание и т.д.)
- Форма, в которой пользователь может оставить отзыв
После того как пользователь успешно отправит форму, он должен быть перенаправлен обратно на страницу товара, и одноразовое сообщение должно быть отображено сверху: «Ваш отзыв отправлен успешно".
Код контроллера (упрощенный) выглядит следующим образом:
[HttpGet]
public ActionResult ViewItem([Bind] long id)
{
var item = _context.Items.First(x => x.Id == id);
return View(item);
}
[HttpGet]
public ActionResult AddReview()
{
return View();
}
[HttpPost]
public ActionResult AddReview([Bind] long id, [Bind] string text)
{
_context.Reviews.Add(new Review { Id = id, Text = text });
_context.SaveChanges();
return RedirectToAction("ViewItem");
}
Есть несколько требований, чтобы удовлетворить:
- Сообщение не должно показать еще раз, если пользователь обновляет страницу элемента.
- Сообщение не должно загрязнять URL.
- Методы контроллера не могут быть объединены в один.
Я думал о сохранении сообщения в сеансе пользователя и отбрасывании его после его отображения, но может быть, есть лучшее решение?
TempData будет работать для этого. См. Пример в этом вопросе: [http://stackoverflow.com/questions/1500402/when-to-use-tempdata-vs-session-in-asp-net-mvc](http://stackoverflow.com/questions/1500402/when-to-use-tempdata-vs-session-in-asp-net-mvc) – markpsmith
ViewBag или ViewData будут лучше сеанса. См. Http://www.arunprakash.co.in/2013/08/viewbag-viewdata-tempdata-and-view.html –
TEMPDATA рекомендуется здесь, он будет действовать как флэш-мессенджер. –