Wie beibehalten List<T> Immobilien in ASP.NET Custom Control?
Ich habe die folgende Eigenschaft in einem benutzerdefinierten Steuerelement:
List<myClass> _items;
public List<myClass> Items{
get { return _items; }
set { _items= value; }
}
In meinem codebehind, füge ich Elemente der Auflistung im...
myCustomControl.items.Add(new myClass());
Diese sind jedoch nicht dauerhaft über postbacks. Was ist der richtige Weg, um Persistenz in benutzerdefinierte Steuerelemente?
InformationsquelleAutor Larsenal | 2008-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Huch! Nicht legen Sie ein Liste<> in den ViewState! Es wird Massiv sein!
Wenn Sie fügen Sie eine Liste<string>, enthält zwei Elemente - "abc" und "xyz" in die ViewState, wird es wachsen, indem 312 bytes.
Wenn Sie stattdessen fügen Sie ein string[] , enthält die gleichen zwei Elemente, es wird nur wachsen von 24 bytes.
Und das sind nur Listen von strings! Sie können Ihre Klassen in es als Corey Downie vermuten lässt, sondern Ihre ViewState wird Pilz!
Halten es eine vernünftige Größe, die Sie haben zu gehen, einige Mühe, um konvertieren Sie Ihre Liste der Elemente in arrays von strings und wieder zurück.
Als alternative in Erwägung ziehen, Ihre Objekte in die Session: auf diese Weise werden Ihre Objekte werden auf dem server gespeichert, anstatt serialisierten Daten in ViewState und an den browser gesendet und wieder zurück.
Vereinbart. Sitzungen sind ja sowas von beschränkt (obwohl ziemlich praktisch, wenn man kann Sie verwenden).
InformationsquelleAutor teedyay
Einer Weise zu überwinden, die Größe problem mit einer generischen Liste ist die Persistenz im ViewState als grundlegende array-Typ:
InformationsquelleAutor
wenn man darüber spricht, verharren die Daten über postbacks von der gleichen Seite, dann können Sie es manuell hinzufügen Elemente den ViewState und Holen Sie Auf Laden.
InformationsquelleAutor Victor
Können Sie speichern Sie Sie in der controls und viewstate
Sie müssen werfen Sie Ihre return Wert in die get {}. ViewState ist vom Typ Object nicht vom Typ Liste<myClass>.
InformationsquelleAutor Corey Downie
Ich Stimme zu, dass es Probleme mit einer Liste<> in viewstate-aber es funktioniert. Beachten Sie, dass es keine setter auf dieses design. Benötigen Sie einen Verweis auf das list-Objekt-Objekt, und Ihre get-Methode können neue Liste, wenn nötig.
InformationsquelleAutor andleer