So speichern Sie Variablen pro Benutzersitzung und Seite
-
10-12-2019 - |
Frage
Ich verwende drei Webparts.Webpart A erstellt einen Wert, wenn der Benutzer auf die Schaltfläche in Webpart A klickt.WebPart B verwendet diesen Wert, um eine Liste mit Elementen zu erstellen, die der Benutzer auswählen kann.WebPart C verwendet beide Werte, um zu Testzwecken eine Zeichenfolge zu erstellen.
WebPart B verwendet diese Liste, um eine Dropdown-Box zu füllen.Immer wenn der ausgewählte Wert geändert wird, sollte WebPart C aktualisiert werden.Dies ist die Deklaration der Kontrolle.
_documentTypeList = new DropDownList();
_documentTypeList.AutoPostBack = true;
this.Controls.Add(_documentTypeList);
Das Problem hierbei ist die Verwendung
_documentTypeList.AutoPostBack = true;
lädt die komplette Seite neu und setzt den Wert in WebPart A auf null zurück.Wie sende ich den neuen Wert von WebPart B an WebPart C, ohne den Wert von WebPart A zu verlieren?Das alles passiert auf einer Seite.
Lösung
Das Speichern von Sitzungsstatusvariablen kann erfolgen mit:
public string Name
{
get
{
return Page.Session["SaveName"] as string;
}
set
{
Page.Session["SaveName"] = value;
}
}
Dies ist ein Getter/Setter zum Speichern/Abrufen aus dem Sitzungsstatus
Um dies zu verwenden, gehen Sie wie folgt vor:
Dies ruft den Wert aus dem Sitzungsstatus ab (muss im onPreRender-Ereignis vorhanden sein, um Sitzungsstatusvariablen anzuzeigen).
txtName.Text = Name;
Dies wird in den Sitzungsstatus versetzt (kann überall dort sein, wo Sie den Sitzungsstatus speichern möchten)
Name = txtName.Text;
für int-Wert:
ändern public string Name
Zu public int Name
und das Gleiche gilt für alles andere wie Bool-Werte usw.
also würde es für int so aussehen:
public int Name
{
get
{
return Page.Session["SaveName"] as int;
}
set
{
Page.Session["SaveName"] = value;
}
}
Wie andere angemerkt haben, sollten Sie für die Übermittlung von Daten zwischen Webparts die iInterface-Methode verwenden:
Bereitstellung (Webpart, der Daten sendet), Verbraucher (Webpart, der diese Daten verwendet) und Schnittstelle, die die Verbindung zwischen den Webparts herstellt:
Das Obige wird zu 100 % funktionieren und Ihre Werte beim Postback speichern :)
Nur für den Fall, dass Sie das brauchen ;) Ich habe unten einige Links zu Verbindungen gepostet.
Probleme mit verbindbaren WebParts......................?
Und
Verbindung zwischen 2 Webparts
ich hoffe es hilft :)
Andere Tipps
Haben Sie versucht, if (!Page.IsPostBack) { your code here }
zu versuchen?
Haben Sie versucht, benutzerdefinierte Web-Teilen-Verbindung zu Ihrem Zweck zu erstellen?Wenn Sie Ihre Anforderung durchlaufen haben, ist dies möglicherweise die am besten geeignete Option
zuvor die Webteile, die mit in der folgenden Reihenfolge verbunden sind. generasacodicetagpre.
Dies erstellte einen Fehler, wenn ich beide Werte in WebPart c anrufen wollte, wenn ich den Wert in WebPart B. wechselt. Wenn der Wert von WebPart B geändert wurde Wert, der in der Benutzerinteraktion erstellt wird und nicht auf der Seite geladen wurde, war der Wert verloren. WebPart B und WebPart c ergriffen, um ohne den Wert von WebPart A zu funktionieren. Wenn Sie die Webpart-Verbindung wie oben beschrieben halten möchten, überprüfen Sie bitte die Antwort von fastsharepointmaster.
Weil in meinem Fall Webpart A ein einzigartiges Login-Token erstellt, würde ich es lieber nicht auf der Seite speichern. Ich würde es lieber mit den Webparts mithalten. Dazu habe ich die Verbindung zwischen ihnen geändert. Statt über dem Anschluss habe ich folgende Verbindung verwendet. generasacodicetagpre.
webPart B speichert den Wert von WebPart A und bietet ihm zusammen mit seinem eigenen Wert für WebPart C. So sieht die WebParts B-Schnittstelle derzeit aus. generasacodicetagpre.