SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Daten im Webpart halten

Unbeantwortet Dieser Beitrag hat 10 Antworten

Ohne Rang
9 Beiträge
Rolf Schädlich erstellt 10 Okt. 2010 12:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

 

wie kann ich in einem Webpart am effektivsten Daten über ein Postback hinaus halten?

Gibt es andere Möglichkeiten außer Page.Cache.Insert und Page.Cache.Get?

Vielen Dank schon mal für eine Antwort.

Rolf.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Okt. 2010 08:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ViewState

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
9 Beiträge
Rolf Schädlich Als Antwort am 11 Okt. 2010 12:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke.

Gilt das auch, wenn ich nur Werte aus Textboxen und selektierte Items aus Dropdownlists speichern will?

Rolf.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Okt. 2010 13:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die brauchst Du gar nicht speichern, weil das die Controls selbst machen. Eingegebene Texte in Textboxen und die Auswahl von Selectboxen bleiben erhalten.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 11 Okt. 2010 14:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es sei den die (neuen) Werte werden durch deine Programmierung wieder überschrieben z.B. Standardwerte sn der Falsche  stelle gesetzt (Asp.Net Life Cycle).

Ohne Rang
9 Beiträge
Rolf Schädlich Als Antwort am 12 Okt. 2010 07:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Thomas,

danke für den Tipp.

Gibt es irgendwo ein gutes Beispiel für ein Webpart Lifecycle, wo ich auch sehe, in welcher Methode man am besten was macht?

Rolf.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 12 Okt. 2010 08:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Grunde ist das relativ einfach:

erzeuge die Controls in CreateChildControls. Setze ihre Initialwerte nur, wenn es kein Postback ist ( if (!Page.IsPostBack) ). Datenbindung macht man i.d.R. in OnPreRender.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
9 Beiträge
Rolf Schädlich Als Antwort am 13 Okt. 2010 11:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry, aber wahrscheinlich stelle ich mich zu dumm an...

Beispiel:

 

<DefaultProperty("Text"), _
ParseChildren(True), PersistChildren(False), _
ToolboxData("<{0}:MessedatenDeutschland runat=server></{0}:MessedatenDeutschland>")> _
Public Class MessedatenDeutschland
    Inherits UserControl
    Implements IPostBackDataHandler
    Implements IPostBackEventHandler 
    Implements IRequiresSessionState
    Implements ITemplate
...
Private txtTest As TextBox
...
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
txtTest = New TextBox
txtTest.ID = "txtTest"
Controls.Add(txtTest)
 If Not Page.IsPostBack Then
            '=== erstes mal
            txtTest.Text = "1"
        Else
            '=== folgend
            txtTest.Text = "2"
End If
...

ist jetzt ein Postback, wird das Control neu instanziiert (der Initialwert also weg), obwohl CreateChildControls doch eigentlich prüfen sollte, ob die Controls schon erzeugt sind... oder?

Rolf

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Okt. 2010 11:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich dachte Du hättest ein Webpart. Der Code ist aber ein UserControl.

Nimm mal die ganzen Implements weg. Die brauchst Du nicht, weil das die Basisklasse UserControl bereits für Dich erledigt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
9 Beiträge
Rolf Schädlich Als Antwort am 13 Okt. 2010 12:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

sorry, hatte ich vergessen zu erwähnen.

ohne Implements hat sich aber auch nichts geändert.

Hier ist das Webpart, das das UserControl einbindet:

 

using System.Runtime.InteropServices;
using System.Web.UI;

using System.Web.UI.WebControls.WebParts;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
using Auma.SharePoint.Internet.MessedatenDeutschland;
 
namespace Auma.SharePoint.Internet.Controls.WebParts
 
{
    [Guid("39A619D4-69CA-4115-AE5A-832F5421498E")]
    public class MessedatenDeutschlandWebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
 
        private string _responseString = "URL für MessedatenListe";
 
        protected override void CreateChildControls()
        {
 
            UserControl messedatenDeutschland = new MessedatenDeutschland.MessedatenDeutschland() ;
            Controls.Add(messedatenDeutschland);
        }
 
        [WebBrowsable(true), Personalizable(PersonalizationScope.Shared), SPWebCategoryName("Auma"),

       WebDisplayName("Url"), WebDescription("Text To Show")]

        public string ResponseString { get { return _responseString; } set { _responseString = value; } }

    }
}

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Okt. 2010 12:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

D.h. die eigentliche Oberfläche wird durch das UserControl (und nicht durch das Webpart) bereitgestellt. In UserControls ist die Vorgehensweise eine ganz andere.

Dort erzuegst man die Oberfläche normalerweise über den grafischen Designer, der dann die ascx-Datei befüllt. Code dazu kommt in die CodeBehind ascx.vb-Datei. Damit werden die Controls bereits in der ascx erzeugt und im Code nur noch referenziert:

ascx; <asp:TextBox id="textBox" runat="server"/>
ascx.vb: Protected textBox As TextBox

Man legt einfach eine Protected-Variable mit dem Namen an, der als id in der ascx steht und fertig.

Viele Grüße
Andi
af @ evocom de
Blog