Подтвердить что ты не робот

ASP.NET MVC: как отобразить сообщение подтверждения успеха после обработки на стороне сервера

У меня есть требование отобразить сообщение, подтверждающее успешное обновление базы данных в приложении ASP.NET MVC. В настоящее время приложение показывает сообщения (используя помощник ValidationSummary) при возникновении ошибки. При успешной работе приложение в настоящее время перенаправляет в подходящую точку навигации.

Цели:

  • Отобразить соответствующее сообщение.
  • Минимизировать действия пользователя, необходимые для продолжения после чтения сообщения
  • Избегайте дополнительных сообщений/раундов, чтобы отобразить сообщение
  • Минимизировать усилия по разработке и риск вставки сообщения в несколько точек приложения

Моим предпочтением было бы какое-то отображение сообщений типа подсказки рядом с кнопкой отправки, а затем механизм для удаления сообщения и продолжения существующего перенаправления после успеха.

Это похоже на вызов Ajax, а не на существующий HTTP POST для отправки формы. Как я могу это сделать?

4b9b3361

Ответ 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