Empfehlungen für gute Möglichkeiten zum Anzeigen von Benutzermeldungen in asp.net?

8

Ich habe eine App voll mit Seiten und Benutzersteuerelementen, von denen viele ein oder mehrere Label-Steuerelemente zum Anzeigen verschiedener Nachrichten für den Benutzer enthalten.

Beispiel: Das Benutzersteuerelement AddCompany.ascx, das normalerweise auf der Company.aspx-Seite (mit App.Master MasterPage) verwendet wird, hat eine Bezeichnung namens "OutOfCreditLabel" mit Text="Fehler: Sie kann keine neue Firma erstellen, da du kein Guthaben mehr hast ". Der Code prüft das Guthaben und zeigt bei Bedarf das Etikett an.

Ich möchte all diese Labels überall loswerden und habe einfach eine Methode, die ich von überall anrufen kann wie

%Vor%

In früheren Projekten habe ich dies als einzelnes Label auf der Masterseite und als public-Methode in .master.cs implementiert - solange die Seite die Zeile

enthält %Vor%

drin, das funktioniert - aber ich kann es nicht an Benutzersteuerelementen (.ascx.cs) arbeiten. Gibt es einen Trick?

Oder ... Gibt es einen besseren Weg?

Was würden Sie für eine globale Benutzerbenachrichtigungsmethode empfehlen, die von überall auf der Site funktioniert?

Irgendwelche netten jQuery-Lösungen, vielleicht?

Aktualisieren
RPM1984 hat um weitere Klärung gebeten, also versuche ich das anders zu fragen:

Ich brauche eine Methode, die ich vom Code-Behind aufrufen kann (von einer Seite oder einem Benutzer-Steuerelement ), die dann den Text anzeigt, den ich dem Benutzer gebe, wie stackoverflow Ihnen etwas Neues erzählt Antworten auf Ihre Frage beim nächsten Besuch der Website. Es kann oben im Fenster sein (wie SO) oder irgendwo auf der Seite, egal. Was zählt ist, dass es eine "globale" Herangehensweise ist, anstatt verschiedene Javascript-Warnungen und asp: label ist übersät auf jeder anderen Seite und Benutzerkontrolle im Projekt.

So etwas wie dieses Szenario:

Ein Benutzer klickt auf die Schaltfläche "Widget erstellen" in meinem Benutzersteuerelement "Widget-Manager" auf meiner Seite. Im Ereignishandler ist:

%Vor%

Dies führt dazu, dass der Benutzer sieht "Es tut uns leid, Sie können keine Widgets erstellen; Sie haben kein Guthaben mehr." Entweder in einem Popup oder in einem roten Text auf der Seite irgendwo oder oben wie StackOverflow, alles ist in Ordnung

Macht das Sinn?

    
MGOwen 27.07.2010, 02:49
quelle

9 Antworten

2

Ich persönlich würde das HttpContext.Current.Items-Dictionary lieber mit einem benutzerdefinierten Steuerelement verwenden. Ähnlich wie Keith Bluestones Ansatz, erfordert jedoch kein willkürlich benanntes Steuerelement auf der Seite; es macht sehr deutlich, was vor sich geht. Sie könnten es einfach in eine Klasse als Server-Steuerelement packen, aber hier ist es, in ein Standard-Web-Projekt zu fallen.

Um eine Nachricht in Ihrem Code hinterher zu registrieren:

%Vor%

Zur Anzeige auf Ihrer Seite oder Masterseite oder wo auch immer, wirklich:

%Vor%

Hier sind die Dateien, die Sie brauchen:
~ \ App_Code \ SiteMessageUtility.cs

%Vor%

~ \ Controls \ SiteMessage.aspx

%Vor%

~ \ Controls \ SiteMessage.aspx.cs

%Vor%     
Matt DeKrey 05.08.2010 01:48
quelle
1

Fügen Sie auf der Masterseite die folgenden Steuerelemente hinzu: Das versteckte hfMsg-Feld enthält die Nachricht, die angezeigt wird und die hfCtrl wird den Namen des HTML-Steuerelements enthalten, das diese Nachricht anzeigt, die in diesem Beispiel lblMsg sein wird.

%Vor%

HINWEIS: Sie können ein anderes HTML-Steuerelement mit einer anderen ID auf einem ASCX-Steuerelement hinzufügen und es verwenden, um die Nachricht anstelle von lblMsg anzuzeigen.

und das folgende Skript:

%Vor%

HINWEIS: Das Skript prüft einfach, ob auf dem hfMsg-Steuerelement eine Nachricht angezeigt wird oder nicht.

und fügen Sie der Masterseite die folgenden zwei Methoden hinzu:

%Vor%

Schließlich können Sie die ShowMessage-Methode von einer beliebigen Seite wie dieser aufrufen, um eine Nachricht auf der Masterseite anzuzeigen:

%Vor%

Wenn Sie ein Benutzersteuerelement mit einem HTML-Label (z. B. lblUserMsg) zum Anzeigen der Nachricht haben, können Sie einfach ShowMessage aufrufen und ihm den Namen des Labels übergeben:

%Vor%     
Mostafa Elmoghazi 27.07.2010 07:11
quelle
1

Warum nicht eine einfache HTML "Old School" Erweiterungsmethode? (d. h. statische Methode)

%Vor%

Dann in Ihrem HTML:

%Vor%

Importieren Sie auf Ihrer Hauptmasterseite einfach den Namespace:

%Vor%

BEARBEITEN, nachdem die Frage aktualisiert wurde

Ok, ich sehe, was du jetzt versuchst. Ich würde empfehlen, alles auf der Client-Seite zu tun.

Das heißt, erstellen Sie auf Ihrer Hauptmasterseite ein ursprünglich verstecktes <div> mit einer eindeutigen ID:

%Vor%

Erstellen Sie dann irgendwo in Ihrem Webprojekt eine Hilfsmethode und geben Sie ein Skript aus.

%Vor%

Natürlich ist dies nur eine Richtlinie. Sie müssen jQuery nicht verwenden, Sie müssen das Skript in der Methode nicht fest codieren. Sie könnten eine JavaScript-Funktion erstellen, die eine Zeichenfolge akzeptiert und den HTML-Code des div ändert, und dann einfach die Funktion aufrufen.

Es hängt alles davon ab, wie kompliziert Ihre "Nachricht" ist, wenn Sie spezielle Serverkontrollen, Internationalisierung, etc. benötigen.

Aber das ist sicherlich der einfachste Weg, um das zu erreichen, was Sie wollen (IMHO).

    
RPM1984 27.07.2010 03:24
quelle
1

Wenn ich in der MasterPage eine SetStatus-Methode verwende, habe ich immer Zugriff auf die MasterPage innerhalb eines Benutzersteuerelements. Erstellen Sie einfach eine private Eigenschaft in der Benutzersteuerung (oder erstellen Sie eine baseControl-Klasse, von der alle Benutzersteuerelemente erben) ):

%Vor%

Wenn Sie ein Steuerelement verwenden, um die Statusnachricht zu speichern, denken Sie daran, ViewState darauf zu deaktivieren. Andernfalls erhalten Sie die gleiche Statusmeldung über Postbacks, die Sie nicht möchten.

    
Robert W 28.07.2010 11:04
quelle
1

Einige gute Antworten, aber ...

  1. Zu Robert W : Die Masterseite impl funktioniert, erfordert aber eine starke Kopplung (Kenntnis von) mit dem Masterseitentyp. Masterseiten sollten generell nur den Stil beeinflussen, richtig? Z.B. Ich sollte Masterseiten ändern können, ohne meine App zu zerstören.
  2. SubPortal : Ja, sehr clever, aber ... zu schlau für mich. Hat auch Master-Seitenausgabe.
  3. RPM1984 : wieder, zu schlau für mich!

MGOwen hat keine speziellen DHTML-Anforderungen erwähnt (z. B. Aktualisierung von der Client-Seite). Warum also nicht einfach eine einfache serverseitige Hilfsmethode implementieren, wie er es erwähnt hat, das Zielsteuerelement finden, das die Nachricht anzeigt und anzeigen?

Die folgende ShowMessage findet das Zielnachrichtensteuerelement unabhängig davon, wo es sich auf der Seite befindet. Außerdem kann jede Seite das ShowMessage-Verhalten der Standardanwendung bei Bedarf überschreiben.

%Vor%

Um es zu verwenden, platzieren Sie einfach ein Literal-Steuerelement auf der Seite, wie in:

%Vor%

Zur Verwendung rufen Sie einfach ShowMessage auf, wie in ASPHelper.ShowMessage ("unzureichendes Guthaben") . Hoffe, das ist was du suchst ... Keith

    
Keith Bluestone 29.07.2010 17:49
quelle
1

Javascript-sicheres Popup. Funktioniert mit Ajax / jQuery.

%Vor%

Region "Öffentliche Subs"

%Vor%

Endregion

%Vor%

Ende-Namespace

Verwenden Sie durch Aufruf:

%Vor%     
bulltorious 05.08.2010 16:26
quelle
1

Ich habe nach einer standortweiten Möglichkeit gesucht, um dem Benutzer eine Nachricht anzuzeigen. Ich fand jnotifica . Es ähnelt der Leiste von stackoverflow am oberen Seitenrand.

Die Website des Autors scheint im Moment nicht verfügbar zu sein.

    
Chuck Conway 27.07.2010 16:08
quelle
1

Heben Sie ein Ereignis im Benutzersteuerelement auf und abonnieren Sie das Ereignis auf der Seite. Der Ereignishandler aktualisiert Ihre benutzerdefinierte Seiteneigenschaft. Scheint so wenig Bewegung wie möglich.

    
RyanBrady 14.11.2010 16:28
quelle
1

Ich würde vorschlagen, eine Klasse für eine benutzerdefinierte Seite (Inherited from System.Web.UI.Page) innerhalb dieses Add-Filters als

zu verwenden %Vor%

und erben Sie alle Ihre Seiten von dieser Klasse anstatt von system.web.ui.page zu erben und verwenden Sie diese Funktion, um Ihre Nachrichten Ihren Kunden zu zeigen

    
Usman 30.07.2010 12:29
quelle