2010-12-15 4 views
3

J'ai un MessageBox JavaScript qui continue à s'afficher lorsque je clique sur des événements dans un répéteur ou actualise la page en cours.ASP C# | MessageBox conserve l'affichage

Voici la fonction:

public myFunctions() 
{ 

} 
/** Display Successs/Error Message **/ 
public void DisplayUserMessage(string messageType, string messageString, Label ErrorMessageLabel) 
{ 
    ErrorMessageLabel.Visible = true; 
    ErrorMessageLabel.Text = "<b>" + messageType.Substring(0, 1).ToUpper() + messageType.Substring(1).ToLower() + ":</b> " + messageString; 
    ErrorMessageLabel.CssClass = messageType.ToLower() + "_message"; 
} 
public void HideUserMessage(Label ErrorMessageLabel) 
{ 
    ErrorMessageLabel.Visible = false; 
    ErrorMessageLabel.Text = ""; 
    ErrorMessageLabel.CssClass = ""; 
} 

Voici le jquery pour le rendre fade out:

$(document).ready(function() { 
/** Success/Error Messages **/ 
$('.success_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow'); 
$('.error_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow'); 

});

Ici, il est sur le MasterPage:

<!-- Message Box --> 
<div id="msgBox" runat="server"> 
     <asp:Label ID="ErrorMessageLabel" CssClass="" runat="server" Visible="false"></asp:Label> 
</div> 

Voici le script dans le code-behind lorsqu'un succès se produit:

Label ErrorMessageLabel = (Label)Master.FindControl("ErrorMessageLabel"); 
new myFunctions().DisplayUserMessage("success", "Administrator Updated!", ErrorMessageLabel); 

Quelqu'un sait comment je peux arrêter de montrer continuellement après avoir cliqué sur un autre bouton ou actualisé la page?

Répondre

0
if(IsPostBack) 
     new myFunctions().HideUserMessage(ErrorMessageLabel); 

Cela a fonctionné. Merci @Harie

1

Utilisez une entrée masquée et définissez la valeur lorsque la fonction de réussite est appelée. Toutes les autres fois, réinitialisez la valeur. Dans votre fonction de document prêt, vérifiez la valeur de l'élément caché, puis appelez la fonction animée.

<input id="txtHidSuccess" type="hidden" runat="server" /> 

Dans la page charge

txtHidSuccess.Value = "0"; 

Dans la fonction succès/erreur

txtHidSuccess.Value = "1"; 

jQuery

$(function(){ 
    if ($("#txtHidSuccess").val() === "1") { 
     /** Success/Error Messages **/ 
     $('.success_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow'); 
     $('.error_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow');  
    } 
}); 
+1

Veuillez utiliser le code dans la fonction Page_Load If (! Postback) {ErrorMessageLabel.Text = "";} et essayez – kbvishnu

+0

@Harie qui a fonctionné. J'ai créé la réponse! – balexander

0

Je vois où vous appelez DisplayUserMessage(), mais pas HideUserMessage(). Ma conjecture est que lorsque vous définissez les propriétés ErrorMessageLabel, elles sont stockées dans l'état d'affichage persisté à travers les publications. Plutôt que d'utiliser un contrôle Label ASP.NET, vous pouvez essayer d'envelopper simplement du texte avec une div régulière et utiliser CSS pour le masquer. Lorsque l'événement de réussite se produit dans votre application, vous pouvez utiliser ClientScriptManager.RegisterStartupScript() pour écrire un script sur le client qui affiche la div. Ensuite, vos fonctions animées peuvent masquer la div si elle est visible.