Comment écrire un code pour afficher le message d'alerte: "Enregistré avec succès", après le stockage des données utilisateur dans la base de données, à l'aide de MVC
J'utilise Asp.Net MVC3, C #, Entity Model.
Essayez d'utiliser TempData
:
public ActionResult Create(FormCollection collection) {
...
TempData["notice"] = "Successfully registered";
return RedirectToAction("Index");
...
}
Ensuite, dans votre vue Index, ou page maître, etc., vous pouvez le faire:
<% if (TempData["notice"] != null) { %>
<p><%= Html.Encode(TempData["notice"]) %></p>
<% } %>
Ou, dans une vue Razor:
@if (TempData["notice"] != null) {
<p>@TempData["notice"]</p>
}
Citation de MSDN (la page n'existe plus depuis 2014, copie archivée ici ):
Une méthode d'action peut stocker des données dans l'objet TempDataDictionary du contrôleur avant d'appeler la méthode RedirectToAction du contrôleur pour appeler l'action suivante. La valeur de la propriété TempData est stockée dans l'état de session. Toute méthode d'action appelée après la définition de la valeur TempDataDictionary peut obtenir des valeurs de l'objet, puis les traiter ou les afficher. La valeur de TempData persiste jusqu'à sa lecture ou jusqu'à l'expiration de la session. La persistance de TempData de cette manière permet des scénarios tels que la redirection, car les valeurs de TempData sont disponibles au-delà d'une seule demande.
La "meilleure" façon de procéder consiste à définir une propriété sur un objet de vue une fois la mise à jour réussie. Vous pouvez ensuite accéder à cette propriété dans la vue et informer l'utilisateur en conséquence.
Cela dit, il serait possible de déclencher une alerte à partir du code du contrôleur en faisant quelque chose comme ça -
public ActionResult ActionName(PostBackData postbackdata)
{
//your DB code
return new JavascriptResult { Script = "alert('Successfully registered');" };
}
Vous pouvez trouver plus d'informations dans cette question - Comment afficher la "boîte de message" en utilisant le contrôleur MVC
Personnellement, j'irais avec AJAX.
Si vous ne pouvez pas passer à @Ajax...
assistants, je vous suggère d'ajouter quelques propriétés dans votre modèle
public bool TriggerOnLoad { get; set; }
public string TriggerOnLoadMessage { get; set: }
Changez votre vue en un modèle fortement tapé via
@using MyModel
Avant de retourner la vue, en cas de création réussie, faites quelque chose comme
MyModel model = new MyModel();
model.TriggerOnLoad = true;
model.TriggerOnLoadMessage = "Object successfully created!";
return View ("Add", model);
puis à votre avis, ajoutez ceci
@{
if (model.TriggerOnLoad) {
<text>
<script type="text/javascript">
alert('@Model.TriggerOnLoadMessage');
</script>
</text>
}
}
Bien sûr, à l'intérieur de la balise, vous pouvez choisir de faire tout ce que vous voulez, événement déclarer une fonction prête pour jQuery:
$(document).ready(function () {
alert('@Model.TriggerOnLoadMessage');
});
N'oubliez pas de réinitialiser les propriétés du modèle en cas d'émission d'alerte réussie.
Une autre chose intéressante à propos de MVC est que vous pouvez réellement définir un EditorTemplate pour tout cela, puis l'utiliser dans votre vue via:
@Html.EditorFor (m => m.TriggerOnLoadMessage)
Mais si vous voulez construire une telle chose, il est peut-être préférable de définir votre propre classe C #:
class ClientMessageNotification {
public bool TriggerOnLoad { get; set; }
public string TriggerOnLoadMessage { get; set: }
}
et ajoutez une propriété ClientMessageNotification
dans votre modèle. Ensuite, écrivez EditorTemplate/DisplayTemplate pour la classe ClientMessageNotification
et vous avez terminé. Agréable, propre et réutilisable.