5
将控件添加到UpdatePanel时,仍然可以从包含页面的代码中访问该控件。这是如何实现的?定制控制开发人员可以做同样的事换句话说,如果我使用ITemplate接口开发一个模板控件,是否有一种方法可以将它连接起来(就像UpdatePanel似乎一样),以便可以从包含页面访问(声明式地)包含的任何控件也?有没有比FindControl()更好的访问ITemplate中的控件的方法?
将控件添加到UpdatePanel时,仍然可以从包含页面的代码中访问该控件。这是如何实现的?定制控制开发人员可以做同样的事换句话说,如果我使用ITemplate接口开发一个模板控件,是否有一种方法可以将它连接起来(就像UpdatePanel似乎一样),以便可以从包含页面访问(声明式地)包含的任何控件也?有没有比FindControl()更好的访问ITemplate中的控件的方法?
您可以在您的ITemplate属性添加一个TemplateInstanceAttribute达到这个目的,它具有促进控制到页面级的效果:
[TemplateInstance(TemplateInstance.Single)]
public ITemplate AnonymousTemplate {
get { ... }
set { ... }
}
从MSDN:
的TemplateInstanceAttribute类允许你将模板属性标记为允许单个或多个实例化的属性。只允许一个实例化的模板可以包含在其中的控件引用。 ZoneTemplate属性是一个只能实例化一次的属性的示例。
感谢尼克,这是有用的信息 - 我不知道这一点。那么,即使您可以在一个页面上拥有多个UpdatePanel控件,也可以深入了解UpdatePanel如何引用控件? – James 2010-02-11 04:04:34
@James - 虽然在这种情况下可以有多个UpdatePanel控件(或任何ITemplate父控件)**,但每个**只能有1个ITemplate子控件,在UpdatePanel中,您不能在同一个面板中拥有2个,因此其中的控件**不会显示两次,导致页面中出现重复的ID问题。 –
2010-02-11 11:14:11
谢谢尼克 - 那太好了。 – James 2010-02-11 18:55:49