J'ai une application pleine de pages et de contrôles utilisateur, dont beaucoup ont une ou plusieurs contrôles d'étiquettes sur eux pour afficher divers messages différents à l'utilisateur.
Exemple: strong> addcompany.ascx Contrôle de l'utilisateur, normalement utilisé sur la page Société.aspx (avec app.master Masterpage) a une étiquette appelée "OutofcreditLabel" avec Text = "Erreur: Vous ne pouvez pas créer une nouvelle société, car vous êtes hors de crédit". Le code vérifie le crédit et affiche l'étiquette si nécessaire. P> Je veux vous débarrasser de toutes ces étiquettes partout et que j'ai juste une méthode que je peux appeler n'importe où comme p> dans des projets précédents J'ai implémenté cela comme une seule étiquette sur la page principale et la méthode publique dans le .master.cs - Tant que la page a la ligne P> if (User.IsOutOfCredit)
{
ShowUserMessage("Sorry, you cannot create widgets; you are out of credit.");
}
9 Réponses :
Pourquoi pas une simple méthode d'extension HTML «ancienne»? (Ie méthode statique) puis dans votre HTML: p> dans votre page maître principale, importez simplement l'espace de noms: p > public void DisplayMessage()
{
string message = SomeWhere.GetSomeCoolText();
StringBuilder script = new StringBuilder();
script.AppendFormat("$('message').show().append("<span>{0}</span>")", message);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), script.ToString(), true);
}
Merci, c'est une approche intéressante, mais on dirait que cela va simplement mettre du texte sur la page (tout le temps). J'ai besoin de quelque chose que je peux utiliser avec une instruction "si" dans le code derrière - si certaines conditions sont remplies, affichez le message. Cela ne fonctionnera pas pour moi, n'est-ce pas?
Ok, je suis un peu confus quant à ce que vous essayez de faire. pour showuserMessage ("texte va ici"); Qu'est-ce que "le texte va ici" et que vous attendez-vous au résultat de ShowReReMerSage?
OK, clarification ajoutée à la question.
J'aime @ Robertw's Répondre le meilleur.
sur la page principale Ajoutez les commandes suivantes:
Le champ masqué HFMSG tiendra le message qui sera affiché
et le HFCTRL détiendra le nom de la commande HTML qui affichera ce message qui sera dans cet exemple lblmsg. Remarque: vous pouvez ajouter un autre contrôle HTML avec un identifiant différent sur un ASCX Contrôlez et utilisez-le pour afficher le message au lieu de lblmsg. p> et le script suivant: p> Remarque: le script vérifie simplement pour voir si le Le contrôle HFMSG a un message à afficher ou non. p> et ajoutez les deux méthodes suivantes à la page principale: p> enfin, vous pouvez enfin appeler la méthode showMessage de n'importe quelle page comme celle-ci pour afficher un message sur la page maître: p> et si vous avez un contrôle utilisateur contenant une étiquette HTML (par exemple, Lblusermsg) pour afficher le message que vous avez Peut simplement appeler showMessage et transmettre le nom de l'étiquette: p>
Ceci est intelligent, mais comment puis-je accéder à Master B> d'un contrôle utilisateur? J'ai essayé cela.Page.master et la ligne VirtualPath qui fonctionne pour les pages, mais elles ne fonctionnent pas sur les contrôles utilisateur (.ascx.cs).
Vous pouvez créer une classe d'utilitaire et ajouter cette méthode à celle-ci: Statique Public statique ShowMessage (page P, chaîne msg, chaîne Ctrl) {(P.Master.FindControl ("HFCTRL") comme Hiddenfield) .value = Ctrl; (P.Master.FindControl ("hfmsg") comme Hiddenfield) .Value = msg; } et appelez-le n'importe où. et dans le contrôle de l'utilisateur l'appelez de cette façon: util.showmessage (this.page, "message", "contrôle");
Je cherchais un moyen d'afficher un message à l'utilisateur à l'utilisateur. J'ai trouvé JnoClA . Il est similaire à la barre de Stackoverflow en haut de la page. P>
Le site de l'auteur semble être en panne pour le moment. p>
Cela semble parfait, mais oui, c'est en panne. :(
Avoir une méthode SteStatus dans le Masterpage est toujours la façon dont je l'ai fait, pour accéder au Masterpage de l'intérieur d'un contrôle de l'utilisateur, créez simplement une propriété privée dans la catégorie UserControl (ou créez une classe BASECONTROL que tous les contrôles utilisateur héritent de ):
private TheNameSpaceOfMyMasterPage.MyMasterPage Master { get { return (TheNameSpaceOfMyMasterPage.MyMasterPage)Page.Master; } } protected void btnSave_OnClick(object sender, EventArgs e) { // Do your stuff... // Set the Status this.Master.ShowStatus("blah blah blah"); }
Certaines bonnes réponses, mais ...
mgowen strong> n'a pas mentionné aucune exigences spéciales DHTML (par exemple la mise à jour du côté client). Alors, pourquoi ne pas simplement implémenter une méthode d'assistant de serveur simple tel qu'il a mentionné, trouvez le contrôle cible qui affiche le message et l'affiche? P> Le suivant showMessage strong> trouvera le contrôle du message cible où qu'il se trouve sur la page, tout en permettant à toute page de remplacer le comportement de l'affichage de l'application par défaut si désiré. p> à utiliser, placez simplement un contrôle littéral sur la page, comme dans: p> à utiliser, appelez simplement showMessage strong>, comme dans asphelper.showmessage ("manque insuffisant") em>. J'espère que c'est ce que vous recherchez ... Keith p> p>
Je voudrais suggérer d'utiliser une classe de page personnalisée (héritée à partir de system.web.ui.page) à l'intérieur qui ajoutez Follwing comme et hériter de toutes vos pages de cette classe au lieu de héroportation de System.Web.UI.Page
et utilisez cette fonction pour afficher vos messages à vos clients p> p>
Personnellement, je préférerais utiliser le dictionnaire httpcontext.current.items avec un contrôle personnalisé. Semblable à l'approche de Keith Bluetone, mais ne nécessite pas de contrôle arbitrairement nommé sur la page; Cela rend très clair ce qui se passe. Vous pouvez l'emballer dans une classe en tant que contrôle du serveur suffisamment facilement, mais ici, il est de tomber dans un projet Web standard.
Pour enregistrer un message dans votre code derrière: P>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Controls_SiteMessage : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } protected override void OnPreRender(EventArgs e) { message.Text = (string)HttpContext.Current.Items["message"]; base.OnPreRender(e); } }
popup sécuritaire JavaScript. Fonctionne avec Ajax / jQuery.
Utilities.WriteJava.Alert("DANGER WILL ROBINSON", Me.Page)
Soulevez un événement dans le contrôle de l'utilisateur, abonnez-vous à l'événement de la page. Le gestionnaire d'événements met à jour votre propriété de page personnalisée. Semble que la moindre quantité de pièces mobiles. P>