web-dev-qa-db-fra.com

Comment afficher un message d'alerte comme "Insertion réussie" après l'insertion dans la base de données à l'aide d'ASp.net MVC3

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.

16
user581007

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.

27
Mike Mertsock

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

5
ipr101

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.

3
BigMike