Ich habe ein benutzerdefiniertes WebControl erstellt, das folgende Struktur hat:
%Vor%Das Steuerelement enthält zwei ControlCollection-Eigenschaften 'Inhalt' und 'Fußzeile'. Habe nie versucht, ein Steuerelement mit mehreren Kontrollsammlungen zu erstellen, aber es wurde so gelöst (vereinfacht):
%Vor%Wie auch immer es richtig zu rendern scheint, funktioniert es nicht mehr, wenn ich asp.net-Labels und Eingabesteuerelemente innerhalb der Eigenschaft hinzufüge (siehe oben asp.net-Code). Ich bekomme die HttpException:
Die Steuerung mit der ID 'KeywordTextBox' konnte nicht gefunden werden ist mit dem Label 'KeywordLabel' verknüpft.
Verständlich, weil das Label vor der Textbox in der Kontrollsammlung steht. Mit standardmäßigen asp.net-Steuerelementen funktioniert es jedoch, warum funktioniert das nicht? Was mache ich falsch? Ist es sogar möglich, zwei Kontrollsammlungen in einem Steuerelement zu haben? Soll ich es anders rendern?
Danke für die Antworten.
Sie können zwei Panels als Eltern Ihrer zwei Kontrollsammlungen verwenden (und sie würden Gruppierung und verbesserte Lesbarkeit bereitstellen). Fügen Sie Ihre Steuerelemente aus jeder Sammlung zur Steuerelementsammlung des jeweiligen Steuerfelds hinzu, und rufen Sie in der Render-Methode einfach die Rendermethoden jedes Steuerfelds auf. Panels rendern ihre untergeordneten Elemente automatisch und weisen ihnen einen eigenen Namespace zu. Sie können daher Steuerelemente mit ähnlichen IDs in verschiedenen Fenstern verwenden.
Ich bin mir nicht sicher, ob das funktionieren wird. Wenn Sie jedoch Vorlagen verwenden, können Sie das Steuerelement veranlassen, die Ausgabe korrekt darzustellen.
Definieren Sie zuerst eine Klasse, die als Typ für das Containersteuerelement verwendet werden soll:
%Vor%Und jetzt das benutzerdefinierte Steuerelement:
%Vor%Tags und Links c# rendering asp.net custom-controls controlcollection