科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET服务器控件之RenderContents

ASP.NET服务器控件之RenderContents

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文重点介绍另一种实现控件呈现的常用方法--使用WebControl类的RenderContents方法实现控件呈现。

作者:金属边缘 来源:天极开发 2007年11月6日

关键字: Windows

  • 评论
  • 分享微博
  • 分享邮件
应用示例

  相信读者在浏览各个网站时,经常会看到"联系我们"等类似文字。当单击这些文字时,操作系统将自动打开自身所带的邮件客户端软件,提示用户发送邮件。本例将实现一个自定义服务器控件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)实现等内容。下面逐一对这些内容进行分析。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章