Je sais qu'il y a plusieurs solutions, mais je cherchais une pure solution C#. J'aime @TylerLong la solution la meilleure, mais je voulais en charge plusieurs messages pour chaque type. De Plus, il est mis à jour pour ASP.NET MVC4, et il n'y a pas de fichier de config changements nécessaires, il serait sans doute travailler pour les autres versions du framework MVC ainsi.
Caractéristiques
- Pure C# solution
- Utilise les aides de vue, les partiels, et d'une extension de la méthode à la classe Controller
- Doit être compatible avec plusieurs versions du framework MVC
- Prend en charge plusieurs messages par type
- Pas de config modifications à votre site Web.les fichiers de configuration
1) Créez MvcProject/Helpers/FlashHelper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcProject.Helpers
{
public enum FlashLevel
{
Primary = 1,
Success = 2,
Info = 3,
Warning = 4,
Danger = 5,
Error = 6
}
public static class FlashHelper
{
public static void Flash(this Controller controller, string message, FlashLevel level)
{
IList<string> messages = null;
string key = String.Format("flash-{0}", level.ToString().ToLower());
messages = (controller.TempData.ContainsKey(key))
? (IList<string>)controller.TempData[key]
: new List<string>();
messages.Add(message);
controller.TempData[key] = messages;
}
}
}
2) Créez MvcProject/Views/Shared/_Flash.cshtml
Partielle:
@helper FlashMessage(System.Web.Mvc.TempDataDictionary tempData)
{
<div class="flash-messages">
@foreach (FlashLevel level in (FlashLevel[]) Enum.GetValues(typeof(FlashLevel)))
{
string type = level.ToString().ToLower();
string key = "flash-" + type;
if (tempData.ContainsKey(key))
{
IList<string> messages = (IList<string>)tempData[key];
foreach (string message in messages)
{
<p class="bg-@type">@message</p>
}
}
}
</div>
}
@FlashMessage(TempData)
3) Rendre l' _Flash
partiel en MvcProject/Views/Shared/_Layout.cshtml
@Html.Partial("_Flash")
Ce sera la cause de la flash les messages à être inclus dans la page web.
4) Ajouter des messages flash dans vos Contrôleurs
La dernière pièce du puzzle est dans vos Contrôleurs, qui devrait maintenant avoir une méthode appelée Flash(string message, FlashLevel level)
:
using MvcProject.Helpers;
public class FoosController : Controller
{
public ActionResult Edit(int id, FooViewModel model)
{
// ...
this.Flash("Foo was updated", FlashLevel.Success);
this.Flash("Another success message!", FlashLevel.Success);
this.Flash("But there was a slight problem...", FlashLevel.Warning);
return RedirectToAction("Edit", new { id = id });
}
}
Twitter Bootstrap CSS Intégration
Pour ceux d'entre vous avec Bootstrap CSS, vous aurez besoin d'inclure l'extrait suivant de CSS quelque part:
.flash-messages p
{
padding: .5em;
}