快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
入值",才能够保持逻辑一致;否则建议设 置为DefaultValue("")即可。

3.8.10 在Render方法中利用基类资源

在开发过程中,经常会使用在Render方法中绘制自己的控件的方式,比如:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void Render(HtmlTextWriter writer)
{
   //base.Render(writer);
   writer.Write(Text);
}

由于子控件的所有特性,例如控件类型和样式等,都是控件开发人员在该方法中自己编程实现 ,所以一般就会把这句 base.Render(writer);清除掉,但这样也会导致基类中的一些默认方法不 会被页框架调用,因为在base.Render方法体中会依次调用这些方法,比如:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
   writer.AddAttribute(HtmlTextWriterAttribute.Onclick,this.OnClientClick);
   base.AddAttributesToRender(writer);
}

protected override void RenderContents(HtmlTextWriter writer)
{
   base.RenderContents(writer);
}

public override void RenderBeginTag(HtmlTextWriter writer)
{
   writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);
   writer.RenderBeginTag(HtmlTextWriterTag.Div);
}

在RenderBeginTag方法中可以重新设置主控件标记类型,并且在RenderBeginTag中可以依次调 用 base.AddAttributesToRender方法,重要的是在base.AddAttributesToRender方法中系统会自 动完成一些重要的工作,如下是它的代码片段:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected virtual void AddAttributesToRender(HtmlTextWriter writer)
{
   if (this.ID != null)
   {
     writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
   }
   if (this._webControlFlags[4])
   {
     writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, accessKey);
   }
   if (!this.Enabled)
   {
     writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
   }
   if (this._webControlFlags[0x10])
   {
     writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, tabIndex.ToString (NumberFormatInfo.InvariantInfo));
   }
   if (this._webControlFlags[8])
   {
     writer.AddAttribute(HtmlTextWriterAttribute.Title, toolTip);
   }
   if ((this.TagKey == HtmlTextWriterTag.Span) || (this.TagKey ==  HtmlTextWriterTag.A))
   {
     this.AddDisplayInlineBlockIfNeeded(writer);
   }
   if (this.ControlStyleCreated && !this.ControlStyle.IsEmpty)
   {
     this.ControlStyle.AddAttributesToRender(writer, this);
   }
   //… …
}

可以看到在该方法中系统会把从WebControl继承过来的一些基本属性,如Enable,AccessKey, TabIndex等赋给主控件标记。另外,下面这句也是非常重要的:

if (this.ControlStyleCreated && !this.ControlStyle.IsEmpty)
{
   this.ControlStyle.AddAttributesToRender(writer, th

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号