Asp.net 3.5控件和组件开发技术系列—从零开始开发服务器控件(下)
体中代码的执行顺序会影响检索效率,因为很多情况下不需要递归 页面的子控件就可以直接找到指定控件;重写的FindControl是Control基类中FindControl默认实 现的扩展,对Control类中的 FindControl功能完全保留。
3.8.6 映射服务端控件值到客户端 在开发控件时,服务端的属性和值在默认情况下不会自动作为属性追加到主控件客户端HTML标 记中。许多情况下我们也需要在客户端获取服务端属性的某个值,则可以使用下面两种方法实现该 功能: 1.使用AddAttribute方法 writer.AddAttribute("Key", this.Value); 该方法一般用于简单控件(原始控件,即非组件控件)开发时使用。在该方法后面会有生成控 件标签类型(如table,div等)的语句(除非不想追加到主控件而是子控件上,也是可以的),如 : writer.RenderBeginTag(HtmlTextWriterTag.Table); ... ... 则Table在客户端就会具有一个Key的属性,最终在浏览器呈现的HTML源代码中会看到如下形式 :
如此,在客户端可以直接通过 document.getElementById("Table1").Key获取服务端映射过来 的值。 2.使用RegisterExpandoAttribute方法
该方法是ASP.NET控件开发对客户端支持的标准方法,可以为某个已经定义的控件实例增加属性 ,当前控件ID可以是主控件ID,也可以是子控件ID,此方法常用于开发组件控件。功能与方法1类 似,就不再多说。 以上是两种把服务端属性值直接映射到客户端的方法。ASP.NET控件开发对客户端编程的支持功 能远不止这些,在后面章节还有专门讲解,内容涉及标准的JavaScript客户端对象的创建和HTC客 户端对象的创建等。 3.8.7 禁止派生自CompositeControl的控件创建子控件 默认从CompositeControl派生的复合控件,由于CompositeControl实现了基接口中的方法 RecreateChildContros,CreateChildControls方法在设计期间会默认执行。ASP.NET环境主要采用 此手段实现对设计模式下执行CreateChildControls方法更好的支持,但这样做并不总是好事,比 如在有些情况下不要求在设计模式下执行 CreateChildControls方法,比如我们创建的子控件比较 多,这样CreateChildControls执行效率比较低,为了提高速度在设计模式下仅让它显示简单的文 本即可(开发人员使用这种方法时,在设计模式下由于看不到完整的控件呈现,视觉上会有些别扭 ,但打开设计器的速度会变快,另外这样一点也不影响最终用户在运行时看到的效果),像这种情 况我们可以再禁止ChreateChildControls的执行,仅需要重写 RecreateChildControls,并把默认 实现注释掉即可:
这样,就像继承WebControl一样,默认的CreateChildControls就不会执行了,就不用把 Controls的内容作为设计模式显示内容,要想显示自己定义设计模式内容,只需要在设计模式时( 参考3.8.1节)在Render方法中输出自己内容即可。 在实际开发时对较复杂的控件主要采用这种手段屏蔽创建子控件逻辑。 3.8.8 使用CreateChildControls的注意事项 关于CreateChildControls方法的使用在前面几节中都讲到了,相信读者已经掌握了其功能和用 法。这里要重点强调一下,在它的内部一般只有生成子控件并增加到Controls的逻辑,其他的逻辑 尽量不要加在 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |