自定义 Web 服务器控件

简介:

MSDN中关于本节内容的演练:http://msdn.microsoft.com/zh-cn/library/yhzc935f(v=vs.100).aspx

微软的介绍已经足够详尽,我这里只是简单的说一下如何自定义Web 服务器控件。步骤大致如下:

  1. 新建一个控件类,使其继承自WebControl或要扩展的其它控件(例如 Button、TextBox等)
  2. 添加一些自己需要的属性和方法,然后重写Render、AddAttribute方法,使其可以在客户端展示。
  3. 功能完善以后,编译项目,在需要引用的地方添加Web.Config的配置项,使其可以正常的工作。

就拿MSDN中的演练来说,我们可以新建一个空的web项目,然后添加一个Controls目录(为了层次结构,不是必须的),然后新建一个Web Control的类,名字为WelcomeLabel,代码如下:

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SampleCustomWebControl.Controls
{
    [
        AspNetHostingPermission(SecurityAction.Demand,
            Level = AspNetHostingPermissionLevel.Minimal),
        AspNetHostingPermission(SecurityAction.InheritanceDemand,
            Level = AspNetHostingPermissionLevel.Minimal),
        DefaultProperty("Text"),
        ToolboxData("<{0}:WelcomeLabel runat=\"server\"> </{0}:WelcomeLabel>")
    ]
    public class WelcomeLabel : WebControl
    {
        [
            Bindable(true),
            Category("Appearance"),
            DefaultValue(""),
            Description("The welcome message text."),
            Localizable(true)
        ]
        public virtual string Text
        {
            get
            {
                string s = (string)ViewState["Text"];
                return (s == null) ? String.Empty : s;
            }
            set
            {
                ViewState["Text"] = value;
            }
        }

        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.WriteEncodedText(Text);
            if (Context != null)
            {
                string s = Context.User.Identity.Name;
                if (s != null && s != String.Empty)
                {
                    string[] split = s.Split('\\');
                    int n = split.Length - 1;
                    if (split[n] != String.Empty)
                    {
                        writer.Write(", ");
                        writer.Write(split[n]);
                    }
                }
            }
            writer.Write("!");
        }
    }
}
复制代码

完全的微软的代码,没有什么改动。需要说一下的是,上面的一堆特性主要是为了在设计时使用的。

这里推荐从WebControl继承,而不是直接从Control类继承,因为WebControl 类从 Control 派生,并添加了与样式相关的属性,如 Font、ForeColor 和 BackColor。更贴近我们的使用习惯。

控件的绘制过程

在这个例子中,由于只设置了Text属性,并且是作为控件内容来呈现的,所以只需要重写RenderContents就可以了。

控件在绘制的过程中,先调用Render方法,在Render方法中再调用RenderBeginTag、RenderContents和RenderEndTag方法。RenderBeginTag和RenderEndTag 方法是绘制标签的开始和结束的,他们依赖与TagName字段,只要重写了类的TagName字段,这两个方法就没有必要进行重写了。

如果需要向控件中添加一些属性,则需要重写AddAttributesToRender方法。

使用自定义Web服务器控件

将项目编译为.dll文件以后,在web项目中引用。

添加webConfig的配置:

      <pages>
        <controls>
          <add tagPrefix="cc" namespace="SampleCustomWebControl.Controls" assembly="SampleCustomWebControl" />
        </controls>
      </pages>

在页面中使用:

<cc:WelcomeLabel ID="lblWelcome" runat="server" Text="欢迎访问"></cc:WelcomeLabel>

程序中也可以动态的改变其Text属性:

lblWelcome.Text = "欢迎访问,服务器时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");


本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2013/01/06/2847572.html,如需转载请自行联系原作者

相关文章
|
4月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
4月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
52 8
|
3月前
|
开发框架 JavaScript 前端开发
|
5月前
|
弹性计算 资源调度 API
云服务器 ECS产品使用问题之如何实现自定义页面适配移动端
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
云服务器 ECS产品使用问题之如何实现自定义页面适配移动端
|
4月前
|
开发者 Java Spring
JSF 牵手社交登录,如魔法风暴席卷 Web 世界,开启震撼便捷登录之旅!
【8月更文挑战第31天】在互联网时代,便捷登录成为用户的核心需求。社交登录凭借其便捷性、安全性和社交化的特点,在各类Web应用中广泛应用。JavaServer Faces(JSF),作为一款流行的Java Web框架,能够轻松集成社交登录功能,显著提升用户体验。本文详细介绍社交登录的优势,并提供两种JSF集成社交登录的常见方法:一是利用Spring Social等第三方库简化开发;二是自行实现社交登录流程。开发者可根据项目需求选择适合的方案。
50 0
|
4月前
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
71 0
|
4月前
|
数据采集 前端开发 开发者
Angular表单控件详解:掌握模板驱动与响应式表单的精髓,让Web应用中的数据采集工作变得高效又简单,彻底告别繁琐的表单处理流程
【8月更文挑战第31天】表单是 Web 应用的关键组件,用于用户登录、注册及信息提交。Angular 作为成熟前端框架,提供了强大的表单处理功能,包括模板驱动与响应式表单。本文通过技术博客形式,详细介绍这两种表单控件,并提供示例代码,展示如何利用它们简化表单处理流程,提高开发效率。首先介绍简单的模板驱动表单,然后讲解基于 RxJS 的响应式表单,适用于复杂逻辑。通过本文,你将学会如何高效地使用 Angular 表单控件,提升应用的用户体验。
50 0
|
4月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
6月前
|
弹性计算 网络协议 安全
阿里云服务器ECS自定义购买方式各选项参数选择与注意事项参考
在我们通过自定义购买的方式购买阿里云服务器器ECS时,会有多个选项,有的新手用户可能并不是很清楚这些选项是什么,选择或设置时需要注意什么,本文将从付费类型、地域与可用区、网络及实例、镜像、存储、带宽和安全组、管理设置以及高级选项等多个方面,为您详细介绍如何选择与配置阿里云ECS实例,以供参考。
阿里云服务器ECS自定义购买方式各选项参数选择与注意事项参考
|
4月前
|
网络协议 Ubuntu Linux
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
69 0