Lorsqu'un contrôle est ajouté à un UpdatePanel, il est toujours accessible depuis le code derrière la page contenant. Comment cela est-il réalisé? Les développeurs de contrôles personnalisés peuvent-ils faire de même? En d'autres termes, si je développe un contrôle de gabarit à l'aide de l'interface ITemplate, existe-t-il un moyen de le câbler (comme le semble le UpdatePanel) de sorte que tous les contrôles contenus dans (déclarativement) sont accessibles depuis la page aussi?Existe-t-il un meilleur moyen d'accéder aux contrôles dans un ITemplate que FindControl()?
5
A
Répondre
7
Vous pouvez ajouter un TemplateInstanceAttribute sur votre propriété ITemplate pour y parvenir, il a pour effet de promouvoir les contrôles au niveau de la page:
[TemplateInstance(TemplateInstance.Single)]
public ITemplate AnonymousTemplate {
get { ... }
set { ... }
}
De MSDN:
La classe TemplateInstanceAttribute vous permet pour marquer une propriété de modèle comme une qui autorise des instanciations uniques ou multiples. Un modèle qui n'autorise qu'une seule instanciation peut avoir les contrôles qui sont contenus à l'intérieur de celui-ci référencé. La propriété ZoneTemplate est un exemple d'une propriété qui peut être instanciée une seule fois.
Merci Nick, c'est une information utile - je ne savais pas à ce sujet. Donc, un aperçu de la façon dont un UpdatePanel permet le référencement des contrôles, même si vous pouvez avoir plusieurs contrôles UpdatePanel sur une page? – James
@James - Bien que vous puissiez avoir plusieurs contrôles UpdatePanel (ou n'importe quel parent ITemplate) dans ce cas ** chacun ** ne peut en avoir qu'un seul, par exemple. Avec UpdatePanel, vous ne pouvez pas avoir 2 '' dans le même panneau, donc les contrôles à l'intérieur ** n'apparaîtraient pas ** deux fois, provoquant un problème d'ID en double dans votre page. –
Merci Nick - c'est génial. – James