Les notifications Toast ASP.NET MVC
Je suis en utilisant le Toastr plugin de notification dans mon application MVC pour afficher les messages d'état (réussite de modifier, mettre à jour, supprimer, etc), et je me demandais si il existe un moyen simple de mettre un peu de logique dans une vue Partielle et de l'avoir sur ma Mise en page ou dans chaque vue en cas de besoin.
Partielle
<script type="text/javascript">
$(document).ready(function () {
@if (ViewBag.Success == true) {
@:toastr.success("@ViewBag.Message");
} else if (ViewBag.Success == false) {
@:toastr.error("@ViewBag.Message");
}
});
</script>
Vue
//Doesn't work
@Html.Partial("_ToastPartial")
//Tried this directly in the view instead of using the partial, didn't work
@if (ViewBag.Success == true) {
@:toastr.success("@ViewBag.Message");
} else if (ViewBag.Success == false) {
@:toastr.error("@ViewBag.Message");
}
Contrôleur
public ActionResult SomethingAwesome(MyViewModel model)
{
ViewBag.Success = true;
ViewBag.Message = "Employee successfully added";
return RedirectToAction("Index");
}
Cela ne fonctionne pas. Est-il possible d'envelopper quelque chose comme cela dans un partiel ou ne MVC dépouiller le <script>
tags? Puis-je rendre l'partielle à l'intérieur d'un bloc de script sur la Vue?
J'ai même essayé de déplacer le code dans les balises de script directement à la Vue, puis de configurer les valeurs sur le Contrôleur et il semble que rien ne se passe.
De l'aide? Est le ViewBag effacé par le temps, la vue est rendue de nouveau? Dois-je utiliser TempData? Puis-je déplacer un Success
et Message
bien dans mon ViewModel et passer juste que dans ma Vue comme cela?
public ActionResult Index(MyViewModel model)
{
//Do something with model.Success
}
Ma Solution
J'ai utilisé un couple de réponses à venir à une conclusion finale de cette section de mon site, et sera très probablement utiliser la méthode pour la accepté de répondre à d'autres parties.
Je suis allé et a ajouté ce qui suit à mon ViewModel
public bool Success { get; set; }
public string Message { get; set; }
J'ai l'Action renvoie l'Index de la vue avec le ViewModel, après les propriétés ont tous été mis en
//fetch the updated data and shove into ViewModel here
viewModel.Success = true;
viewModel.Message = "Employee successfully checked in";
return View("Index", viewModel);
Puis il suffit d'utiliser la syntaxe Razor, à mon avis,
@if (Model.Success) {
@:toastr.success("@Model.Message");
} else if (!Model.Success && !String.IsNullOrWhiteSpace(Model.Message)) {
@:toastr.error("@Model.Message");
}
Aussi comme un bonus (bien que la mise en œuvre semble bâclée), le rendu de la Partielle dans mon document.Prêt bloc
@Html.Partial("_ToastPartial", Model)
et déplacer le Toastr code de notification à l'partielle
@if (Model.Success) {
@:toastr.success("@Model.Message");
} else if (!Model.Success && !String.IsNullOrWhiteSpace(Model.Message)) {
@:toastr.error("@Model.Message");
}
Plus probable, je mettrais en place d'une interface avec le Message
et Success
propriétés et de faire toutes les ViewModels qui va utiliser la partielle à implémenter cette interface
type="text/javascript"
à votre balise de script et il vous manque les guillemets dans votre javascript: @:toastr.success("@ViewBag.Message")
Merci. Modifié mon code et mise à jour de la question. Ne pas faire fonctionner comme par magie ce que je pensais
Qu'est-ce que votre navigateur de la console? Des erreurs ou des avertissements? Vous pouvez déboguer si votre ViewBag a un message simplement en collant un
alert('@ViewBag.Message')
dans votre ready
fonction.Hrrrm j'ai le sentiment que le ViewBag manque les valeurs après l'Indice est redirigé. Alerter les
@ViewBag.Message
est venu avec rien sur chaque chargeEssayez de mettre votre code javascript dans la vue principale.
OriginalL'auteur dgarbacz | 2014-04-09
Vous devez vous connecter pour publier un commentaire.
Votre contrôleur de l'exécution d'une
RedirectToAction
. Le ViewBag et ViewData ne survit à la demande actuelle. TempData est la chose à utiliser lorsque vous utilisez des redirections (et seulement alors):http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications l'affirme clairement:
OriginalL'auteur Pete
Pour ceux qui sont à la recherche d'une réponse, j'ai trouvé un article utile sur la mise en œuvre de Toastr via MVC ici.
Créer un MVC wrapper pour Toastr
OriginalL'auteur Rethic
L'utilisation de ce package nuget, il était très facile pour moi d'utiliser toastr dans mvc.
Je suis un peu surpris qu'il ne sert plus...
https://www.nuget.org/packages/RedWillow.MvcToastrFlash
OriginalL'auteur Guillaume
Essayer Cette bibliothèque NtoastNotify si vous êtes à la recherche pour une mise en œuvre sur ASP.NET de base. (Avertissement: l'Auteur ici)
Cette bibliothèque fonctionne avec ASP.NET Core, MVC.
Ouais m aussi d'en parler ASP.NET Core, MVC
pouvez-vous me montrer votre .fichier csproj pour le projet web?
si vous web app cibles netcoreapp1.1 ou au-dessus, alors vous pouvez utiliser cette bibliothèque. De vérifier cet échantillon .csproj github.com/nabinked/NToastNotify/blob/master/sample/... où cette bibliothèque est utilisée.
OriginalL'auteur Nabin Karki Thapa