2010-02-10 9 views
5

Wenn ein Steuerelement zu einem UpdatePanel hinzugefügt wird, kann weiterhin auf den Code zugegriffen werden, der hinter der enthaltenden Seite steht. Wie wird das erreicht? Können Entwickler von benutzerdefinierten Steuerelementen das gleiche tun?Gibt es eine bessere Möglichkeit, auf Steuerelemente in einer ITemplate als FindControl() zuzugreifen?

Mit anderen Worten, wenn ich ein Template-Steuerelement mit der ITemplate-Schnittstelle entwickeln, gibt es eine Möglichkeit, es zu verkabeln (wie das UpdatePanel scheint), damit alle Steuerelemente (deklarativ) von der enthaltenden Seite zugegriffen werden kann ebenfalls?

Antwort

7

Sie können ein TemplateInstanceAttribute auf Ihrer ITemplate Eigenschaft hinzufügen, dies zu erreichen, hat es die Wirkung, die Kontrollen auf Seitenebene zu fördern:

[TemplateInstance(TemplateInstance.Single)] 
public ITemplate AnonymousTemplate { 
    get { ... } 
    set { ... } 
} 

Von MSDN:

Die TemplateInstanceAttribute Klasse ermöglicht es Ihnen, Markieren einer Vorlageneigenschaft als eine, die einzelne oder mehrere Instanziierungen zulässt. Eine Vorlage, die nur eine einzelne Instanziierung zulässt, kann die darin enthaltenen Steuerelemente enthalten. Die ZoneTemplate-Eigenschaft ist ein Beispiel für eine Eigenschaft, die nur einmal instanziiert werden kann.

+0

Dank Nick, das ist nützliche Informationen - ich wusste nicht darüber. Also, jeder Einblick, wie ein UpdatePanel das Verweisen von Steuerelementen ermöglicht, obwohl Sie mehrere UpdatePanel-Steuerelemente auf einer Seite haben können? – James

+1

@James - Obwohl Sie in diesem Fall mehrere UpdatePanel-Steuerelemente (oder ein beliebiges ITemplate-Elternelement) haben können, ** kann jedes ** nur 1 von diesem ITemplate-Kind haben, z. Mit UpdatePanel können Sie nicht 2 '' im selben Panel haben, so dass die darin enthaltenen Steuerelemente ** nicht zweimal vorkommen würden, was zu einem doppelten ID-Problem auf Ihrer Seite führen würde. –

+0

Danke Nick - das ist großartig. – James