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?
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
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
les liens suivants peuvent vous aider (affichage des liens car il faudrait mieux expliquer):