Wenn erstreckt, um eine asp.net Web-Steuerung, bei welchem Fall sollten zusätzliche Websteuerelemente injiziert werden?
-
08-07-2019 - |
Frage
Ich versuche, eine Verbundsteuerung oder Verwendung und ASCX zu vermeiden, indem eine bestehende Steuerung erstreckt. Allerdings habe ich Probleme mit dem Erhalten der Kontrollen an den geerbten Steuerelement hinzugefügt und halten ihren Ansichtszustand / Post-zurück Integrität. Jedes Mal, wenn ich die Kontrollen während hinzufügen vorrendern, die Kontrollen zeigen, aber die Post-zurück wirft eine Ansichtszustand Ausnahme. Ich versuchte, sie sowohl dort als auch während Loadviewstate (was natürlich eine lange-shot dumm) Zugabe. Init ist nicht verfügbar, von der Steuerung, die ich erstrecken.
Die Ausnahme ist, Sys.WebForms.PageRequestManagerServerErrorException: Fehlgeschlagen viewsstate zu laden. Die Kontrolle Baum, in den Ansichtszustand wird loaded müssen die Steuerbaum übereinstimmen das wurde verwendet Ansichtszustand zu speichern während die vorherige Anforderung. Zum Beispiel, beim Hinzufügen steuert dynamisch die Kontrollen während eines Post-back hinzugefügt muss entsprechen den Typ und die Position des Kontrollen während der anfänglichen hinzugefügt Anfrage
Lösung
Eigentlich sagt Microsoft sollten Sie die Create Methode.
Sie können die Basisklassenmethode aufrufen, bevor oder nachdem Sie die Steuerelemente hinzufügen, ich bin nicht sicher, ob es eine Konvention ist.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
Ich hoffe, das hilft!
Andere Tipps
Sie sollten sie in OnInit oder in Createchild hinzuzufügen. Wie auch immer, zu vermeiden Probleme mit Viewstate hat, lesen Sie dieser großen Artikel . Möglicherweise Probe „4. Initialisieren geordneten Steuerelemente programmatisch“ ist der Fall.