ASP.NET MVC: как отобразить сообщение подтверждения успеха после обработки на стороне сервера
У меня есть требование отобразить сообщение, подтверждающее успешное обновление базы данных в приложении ASP.NET MVC. В настоящее время приложение показывает сообщения (используя помощник ValidationSummary) при возникновении ошибки. При успешной работе приложение в настоящее время перенаправляет в подходящую точку навигации.
Цели:
- Отобразить соответствующее сообщение.
- Минимизировать действия пользователя, необходимые для продолжения после чтения сообщения
- Избегайте дополнительных сообщений/раундов, чтобы отобразить сообщение
- Минимизировать усилия по разработке и риск вставки сообщения в несколько точек приложения
Моим предпочтением было бы какое-то отображение сообщений типа подсказки рядом с кнопкой отправки, а затем механизм для удаления сообщения и продолжения существующего перенаправления после успеха.
Это похоже на вызов Ajax, а не на существующий HTTP POST для отправки формы. Как я могу это сделать?
Ответы
Ответ 1
Я бы использовал TempData["key"]
Это похоже на ViewData["key"]
, однако данные сохраняются для следующего HttpRequest и автоматически удаляются asp.net после этого
Итак, вы можете это сделать.
Действие контроллера
[HttpPost]
public ActionResult SomePostAction(SomeViewModel vm)
{
if(ModelState.IsValid) // Is User Input Valid?
{
try
{
CommitData();
TempData["UserMessage"] = new MessageVM() { CssClassName = "alert-sucess", Title = "Success!", Message = "Operation Done." };
return RedirectToAction("Success");
}
catch(Exception e)
{
TempData["UserMessage"] = new MessageVM() { CssClassName = "alert-error", Title = "Error!", Message = "Operation Failed." };
return RedirectToAction("Error");
}
}
return View(vm); // Return View Model with model state errors
}
_Layout.cshtml
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@if(TempData["UserMessage"] != null)
{
var message = (MessageVM)TempData["UserMessage"];
<div class="alert @message.CssClassName">
<strong>@message.Title</strong>
@message.Message
</div>
}
@RenderBody()
</body>
</html>
Дополнительная информация: http://www.devcurry.com/2012/05/what-is-aspnet-mvc-tempdata.html
Ответ 2
В успешной операции вы просто храните сообщение об успешном сообщении в ViewBag
как
ViewBag.successMessage="Success"
то на экране проверьте, что значение ViewBag равно null или нет? через javascript, если не null показать сообщение в Div
if('@ViewBag.successMessage'!="")
{
$('#divSuccessMessage').show();
}
else
{
$('#divSuccessMessage').hide();
}
по умолчанию при загрузке страницы скрыть div
Ответ 3
вам могут помочь следующие ссылки (размещение ссылок, поскольку это потребует лучшего объяснения):
http://msdn.microsoft.com/en-us/magazine/ff797575.aspx
http://ofps.oreilly.com/titles/9781449320317/ch_AJAX.html