快速业务通道

Asp.net 3.5控件和组件开发技术系列—从零开始开发服务器控件(下)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
"
  LabelTitle="邮件" ValidateExpression="\w+([-+.'']\w+)*@\w+([-.]\w+)*\.\w+ ([-.] \w+)*"
ErrorMessage="请输入正确的Email!" LabelHeight="" TextBoxHeight="" TextBoxValue=""  >
</cc1:Field>

在浏览器中运行此页面,并分别输入一个合法的和非法的E-mail格式字符串,即可以体验我们 制作的Field控件功能。

3.8 常用开发技巧

3.8.1 DesignMode属性

自定义控件能够以两种模式执行:设计模式和运行模式。运行模式是指控件在浏览器中运行呈 现效果。设计模式是指控件在设计器中呈现的效果,并没有在浏览器中运行。在资源管理器中右击 一个*.aspx页面文件,选择"视图设计器"命令,即可进入到控件的设计模式。

设计模式主要是为控件使用者设计的(不是浏览站点的最终用户),能够让控件使用都在设计 器中就能够看到控件的展现效果,更便捷的配置控件的属性和行为等。设计模式跟运行模式一样在 呈现控件时都是在当前环境下生成控件实例呈现。当然,它们还是有区别的,设计模式较运行模式 除了在控件生命周期阶段有些事件不执行外,也不能够访问一些在仅运行模式下才具有的上下文环 境变量等。ASP.NET对设计模式支持也增加了很多功能,后面会专门一章讲解设计模式下控件开发 。

在设计模式下,控件生命周期的所有方法并不是都执行的,比如CreateChildControls, OnPreRender,Load等方法在设计模式下就不会执行。而Init,Construct(构造方法),Render, RenderContents,还有Dispose等方法在设计模式下就会运行。这样设计的原则是合理的,因为在 OnPreRender这一类事件中我们主要引入一些资源文件(JavaScript/Css/Pictures),在IDE设计 器状态下这些文件路径是取不到的,它要根据当前运行的服务器虚拟路径来找到相应的文件名;还 有,在Load,比如Page控件的 PageLoad事件中,开发人员会将任意可能的代码放在这里执行,比 如引用了服务端的上下文环境等,这时就会报"取不到信息"的异常错误。因此了解这些生命周期的 方法哪些在设计模式下运行,哪些不运行是有必要的。

ASP.NET 2.0已经支持的一个属性DesignMode,如果是在设计模式状态下,此属性值为true,如 果是在浏览器中运行状态下,值为false。这个属性常用于在设计和运行两种模式下都执行的方法 ,如Render方法。看一下这个伪代码例子:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void Render(HtmlTextWriter writer)
{
   if (this.DesignMode)
   {
     writer.Write("<table><tr><td>模拟数据 </td><td>模拟数据</td></tr></table>");
   }
   else
   {
     //访问数据库,取得真实数据,并输出列表
   }
}

不管是设计模式还是运行模式,Render方法都会执行。使用条件语句来进行区分,在设计模式 下,仅输出两列模拟数据,类型与我们在IDE设计器中使用GridView时看到的模拟数据一样;如果 是在运行模式,则会在浏览器中看到从数据库中读取的真实数据。

3.8.2 屏蔽基类控件中的属性

一般我们开发的控件,大多数都会继承基类,比如基类Control,WebControl或Button, GridView等现有控件,只要是继承肯定会遇到这样的场景:继承后的控件会屏蔽某个功能,即我们 需要屏蔽基类中的某个属性和方法。在3.2节中详细讲解了处理继承方法的5种方式,这里再增加一 种屏蔽基类功能的一种场景,只要对某个属性(或方法)增加以下几个特性即可:

//

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号