服务器控件基础知识(2)

应用示例

  相信读者在浏览各个网站时,经常会看到"联系我们"等类似文字。当单击这些文字时,操作系统将自动打开自身所带的邮件客户端软件,提示用户发送邮件。本例将实现一个自定义服务器控件RenderContentsControl,其用于通过呈现包含"mailto:邮件地址"的超链接。本例的示例效果图如图1所示:

´ͼƬ

图1


  如图1所示,页面中呈现了超链接文字"我的邮箱地址"。当单击该链接,系统将发送邮件给"my@mysample.com"。

  在实现以上控件之前,首先应分析如下:本控件包含外观元素,例如,文字大小、颜色、是否粗体等。为此,控件基类不应从Control类继承,而应从WebControl类继承。这样,开发人员将不必自行实现这些外观样式属性等内容。

  下面列举了实现自定义服务器控件的RenderContentsControl.cs文件源代码。

using System;
using System.ComponentModel;
using System.Security;
using System.Security.Permissions;
using System.Web;using System.Web.UI;
using System.Web.UI.WebControls;
namespace UsingRenderContentsControl{
[
 AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal),
 AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),   DefaultProperty("Email"), ParseChildren(true, "Text"),
 ToolboxData("<{0}:RenderContentsControl runat=server></{0}:RenderContentsControl>")
]

 public class RenderContentsControl : WebControl {
  // 实现Email属性
  [Bindable(true)]
  [Category("Appearance")]
  [DefaultValue("")] [Localizable(true)]

  public string Email
  {
   get {
    String s = (String)ViewState["Email"];
    return ((s == null) ? String.Empty : s);
   }
   set {
    ViewState["Email"] = value;
   }
  }
  // 实现Text属性

  [
   Bindable(true), Category("Appearance"), DefaultValue(""), Localizable(true),
   PersistenceMode(PersistenceMode.InnerDefaultProperty)
  ]

  public virtual string Text
  {
   get {
    string s = (string)ViewState["Text"];
    return (s == null) ? String.Empty : s;
   }
   set {
    ViewState["Text"] = value;
   }
  }
  // 重写TagKey属性

  protected override HtmlTextWriterTag TagKey
  {
   get {
    return HtmlTextWriterTag.A;
   }
  }

  // 重写AddAttributesToRender方法

  protected override void AddAttributesToRender(HtmlTextWriter writer)
  {
   base.AddAttributesToRender(writer);
   writer.AddAttribute(HtmlTextWriterAttribute.Href, "mailto:" + Email);
  }

  // 重写RenderContents方法

  protected override void RenderContents(HtmlTextWriter writer)
  {
   if (Text == String.Empty) {
    Text = Email;
   }
   writer.WriteEncodedText(Text);
  }
 }
}

  如上代码所示,RenderContentsControl类继承自WebControl基类,其原因在前文已经说明。另外,在RenderContentsControl类的实现过程中,还包括了元数据属性标记、3个属性(Email、Text和TagKey)和2两个方法(AddAttributesToRender和RenderContents)实现等内容。下面逐一对这些内容进行分析 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值