ASP.NET MVC: comment afficher le message de confirmation de succès après le traitement côté serveur

j'ai une exigence d'afficher un message confirmant une mise à jour réussie de la base de données dans un ASP.NET MVC application. Actuellement, l'application affiche seulement des messages (en utilisant un Helper ValidationSummary) lorsqu'une erreur se produit. Sur une opération réussie, l'application redirige actuellement à un point approprié dans la navigation.

les buts sont:

  • afficher le message de confirmation d'une manière appropriée
  • réduire au minimum les mesures que l'utilisateur doit prendre pour aller de l'avant après avoir lu le message
  • Evitez un post / aller-retour supplémentaire pour afficher le message
  • minimisez les efforts de développement et le risque d'insérer un message à plusieurs points de l'application

Ma préférence serait une sorte d'affichage de message de type de pointe d'outil près du bouton Soumettre et ensuite un mécanisme pour enlever le message et procéder avec la redirection existante après le succès.

cela semble suggérer un appel Ajax plutôt que le HTTP POST existant pour soumettre le formulaire. Comment pourrais-je aller à ce sujet?

21
demandé sur Paul Taylor 2012-11-24 16:31:36

3 réponses

je Voudrais utiliser TempData["key"]

C'est comme ViewData["key"] cependant les données persistent pour la prochaine HttpRequest et sont éliminées automatiquement par asp.net après cela

donc vous pouvez le faire.

Action Du Contrôleur

[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>

Plus D'Info: http://www.devcurry.com/2012/05/what-is-aspnet-mvc-tempdata.html

39
répondu SimonGates 2017-07-11 08:54:47

sur une opération réussie ,vous stockez juste la description du message de succès dans le Visubag comme

ViewBag.successMessage="Success" 

puis en vue, vérifiez que la valeur du paquet est nulle ou pas? par javascript, si non nul, afficher le message dans Div

if('@ViewBag.successMessage'!="")
{
   $('#divSuccessMessage').show();
} 
else
{
  $('#divSuccessMessage').hide();
}

par défaut au chargement de la page cacher la div

10
répondu Anand 2012-11-25 07:21:17

les liens suivants peuvent vous aider (affichage des liens car il faudrait mieux expliquer):

http://msdn.microsoft.com/en-us/magazine/ff797575.aspx

http://ofps.oreilly.com/titles/9781449320317/ch_AJAX.html

1
répondu RohitWagh 2012-11-25 06:39:09