Problem beim Erstellen von dynamischen Controls

x_Red_Eagle_x

Erfahrenes Mitglied
Hallo alle Zusammen,

ich entwickle derzeit geraden ein UserControl, welches dynamisch eine gesamten ControlTree erzeugt und ihn dann in sein eigenes Control einfügt. D.h. das UserControl dient nur als Container.

In dem selbst zusammengebauten ControlTree sind wiederum UserControls die gewisse Aufgaben übernehmen. Soweit so gut, das anzeigen dieses ControlTree funktioniert ohne Problemen, jedoch möchte ich nun auch noch etwas Interaktion hineinbekommen.

Zum Initialisieren der Controls hab ich mir eine eigene Klasse gebastelt, welche das Control initialisiert (jedoch kann es genauso noch von außen - durch Properties - initalisiert werden).

Damit diese Intialisierung nur einmal durchgeführt wird, habe ich ein Flag eingeführt, welches sich "IsInitialized":

Code:
    Private Property IsInitialized() As Boolean
        Get
            If IsNothing(ViewState("IsInitialized")) Then
                Return False
            End If
            Return CBool(ViewState("IsInitialized"))
        End Get
        Set(ByVal value As Boolean)
            ViewState("IsInitialized") = value
        End Set
    End Property

Dies wird nur an einer Stelle benutz:

Code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            ....
            If Not IsNothing(MetaInfo) Then
                If MetaInfo.InitializeValues And Not IsInitialized Then
                    .....
                    IsInitialized = True
                End If
            End If
        End If
End Sub

Wenn dieses IsInitialized gesetzt wird kommt, das nächste mal wenn ich den ControlTree aufbauen lassen möchte folgende Exception:

Fehler beim Laden des Ansichtszustands. Die Steuerelementstruktur, in die der Ansichtszustand geladen werden soll, muss mit der Steuerelementstruktur übereinstimmen, die während der letzten Anforderung zum Speichern des Ansichtszustands verwendet wurde. Beim dynamischen Hinzufügen von Steuerelementen müssen die während eines Sendevorgangs hinzugefügten Steuerelemente z.B. in Typ und Position mit den während der ursprünglichen Anforderung hinzugefügten Steuerelementen übereinstimmen.

Meine bisherigen Recherchen besagen nur, dass ich den ViewState abschalten soll, jedoch benötige ich ihn.

Hat jemand eine Idee wie ich dieses Problem beheben kann?

lg
 
Hallo Red Eagle,

hast du zu Deinem Problem eine Lösung gefunden?
Ich habe das gleiche Problem (in c#) und benötige ebenfalls den Viewstate.
Abgesehen davon kann das abschalten vom ViewState wohl kaum eine Lösung sein, bestenfalls ein Workaround.

Besten Gruß
PerfectAnswer
 
Nein,
habe ich leider nicht. Ich muss gestehen, ich habe auch nach einiger Zeit mich mit anderen Dingen beschäftigt, weil ich keine Lösung finden konnte und auch andere Baustellen noch flicken musste :)

Aber falls du auf etwas stößt, wäre es sehr fein, wenn du es mir dann mitteilen könntest.

Das dass mit dem ViewState abschalten, nur in manchen Fällen zielführend ist, habe ich auch gemerkt. Bei mir war hat es überhaupt nichts gebracht, da der ViewState zwingend erforderlich war/ist.

Tut mir echt leid, dass ich keine andere Antwort für dich habe

lg,
Red Eagle
 
Wird das Control über LoadControl geladen? Etwa so?
Code:
this.ContentPlaceHolder.Controls.Add
    (
    LoadControl("modules/TestControl.ascx")
    );
Wenn ja, dann muss hier dem Control eine ID zugewiesen werden, also nicht direkt in den Placeholder schreiben. Durch die ID ist es dann möglich, dass dem Control nach einem Postback die Postback-Daten wieder zugewiesen werden können.
 
Zurück