2009-10-18 10 views
1

Comment StackOverflow affiche-t-il un bon message de barre d'état en fonction de votre activité? (Cette barre orange en haut de la page) J'espère faire la même chose mais je ne sais pas comment.Comment afficher les messages d'erreur sur une page ASP.NET MVC?

Maintenant, je sais comment afficher les erreurs de validation à l'interface utilisateur en utilisant ASP.NET MVC 1.0 ... ce n'est pas trop difficile. Mais si je veux montrer une barre d'état chose (pas sûr de ce qu'ils s'appellent) et je devine qu'ils sont faits avec jQuery ... comment faites-vous cela.

Encore plus, je tiens aussi à le faire après que j'appelle une autre action

par exemple. Je ne suis pas sûr comment je passe le message à cette action et comment afficher ce message avec l'une de ces choses de la barre d'état.

bravo!

Répondre

3

Plusieurs façons:

  1. Mettez à TempData [ "statusmsg"] et les récupérer à partir de là dans votre action ou une vue. Inconvénients: si l'utilisateur n'a pas cliqué dessus et recharger la page, il ne s'affiche plus.
  2. Mettez-le en session. Vous ne le supprimerez de la session que lorsque l'utilisateur cliquera sur le lien d'état.

Vous pouvez accéder à TempData/session directement, ou vous pouvez avoir BaseController la propriété StatusMsg et d'autres choses connexes, ou vous pouvez avoir BaseViewModel (classe de base pour tous vos modèles de vue de actions) contiennent cette propriété StatusMsg. En ce qui concerne la barre d'état jQuery, vous pouvez facilement en choisir un sur google, par exemple http://www.west-wind.com/WebLog/posts/388213.aspx, http://plugins.jquery.com/project/positionFooter. Toutefois, si vous voulez le placer sur le dessus, il est beaucoup plus facile, juste quelques lignes de CSS/jQuery: position absolue à 0: 0, largeur 100%, réglez peut-être l'opacité, lorsque vous obtenez msg juste faire

<script> 
    <% if (Model.StatusMsg != null) %> 
    $(function(){ $("#statusbar").fadeIn(); }); 
    <% } %> 
</script> 

OK, c'est plus. Vous avez div id = « msg » et

#msg { 
    text-align: center; 
    position: absolute; 
    line-height: 2em; 
    left: 0px; 
    top: 0px; 
    width: 100%; 
    display: none; 
    opacity: 0.7; 
    background-color: #aaf; 
    border-bottom: 1px solid black; 
    } 

Vous pouvez fixer l'élément sur le dessus afin qu'il ne défile pas avec page à l'aide http://plugins.jquery.com/project/jQueryFixedPositionPlugin. Maintenant, chaque fois que vous avez un message d'état, vous faites Session ["status"] = "mymessage". Vous pouvez également remplacer BaseController.OnActionExecuted et placer un message dans Session (s'il s'agit de l'application).

Alors à votre avis vous

<script type="text/javascript"> 
    function showstatus(text) { 
    $("#msg").fadeIn().append("<div>" + text + "</div>"); 
    } 
    $(function(){ 
     <% if (Session["status"] != null) { %> 
     var status = '<%= Session["status"] %>'; 
     showstatus(status); 
     <% ; Session.Remove("status"); } %> 
    }); 
</script> 

Vous pouvez éviter Session.Remove ("statut") en faisant cela dans la base OnActionExecuting:

{ 
    if (Session["status"] != null) 
    { 
    ViewData["status"] = Session["status"]; 
    Session.Remove("status"); 
    } 
} 

et la référence ViewData au lieu de session dans la vue.

Maintenant, bien sûr, il peut y avoir plus de choses à faire, et le code ci-dessus est hors de ma tête, non testé ... mais si cela ne suffit pas pour faire la chose en 5 minutes, alors prendre le temps de fournir une solution de travail complète testée ...et ne facturera pas d'argent pour cela ;-)

+0

Awesome. Je me taisais, voyant si quelqu'un pouvait parler du TempData. Ça me plait mais je n'étais pas sûr. Deuxièmement, je n'étais pas sûr du plugin jQuery .. donc ça s'appelle positionFooter? kewl. Maintenant, comment est-ce que j'aime un Model.StatusMsg (en supposant qu'il a été ajouté, pour le modèle d'une vue) au positionFooter de jQuery? Le code ci-dessus ne fait que dire de se fondre dedans .. mais pas comment définir son contenu? pouvez-vous juste l'éditer un petit peu, s'il vous plaît? –

+0

parfait. il y a assez d'infos ici pour que je fasse ce shiz. impressionnant. Merci mon pote! –

Questions connexes