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");

转载于:https://www.cnblogs.com/youring2/archive/2013/01/06/2847572.html

自定义 Web 服务器控件相关推荐

  1. 可以弹出确认对话框的自定义Web服务器控件ConfirmButton

    作者:活靶子[原创]       出处:AspxBoy.Com 经常在论坛里看到类似这样的问题:"-如何在点击删除按钮的时候弹出个确认删除对话框". 下面我们来自己写一个这样的自定 ...

  2. 如何显示服务器控件,Panel Web 服务器控件概述

    Panel Web 服务器控件概述 10/22/2014 本文内容 更新:2007 年 11 月 Panel Web 服务器控件在 ASP.NET 网页内提供了一种容器控件,您可以将它用作静态文本和其 ...

  3. 服务器控件下拉框显示隐藏,演练:在 GridView Web 服务器控件中编辑时显示下拉列表...

    演练:在 GridView Web 服务器控件中编辑时显示下拉列表 08/18/2008 本文内容 更新:2007 年 11 月 GridView 控件默认显示用于编辑的文本框.可以使用 ASP.NE ...

  4. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  5. [C# 网络编程系列]专题四:自定义Web浏览器

    前言: 前一个专题介绍了自定义的Web服务器,然而向Web服务器发出请求的正是本专题要介绍的Web浏览器,本专题通过简单自定义一个Web浏览器来简单介绍浏览器的工作原理,以及帮助一些初学者揭开浏览器这 ...

  6. HTML服务器控件与Web服务器控件的区别[转]

    项目 HTML服务器控件 Web服务器控件 是否映射到 HTML标签 与HTML标签存在一一对应的映射关系.runat=server属性把传统的HTML标签转换成服务器控件.这使得开发人员可以将ASP ...

  7. 动态设置 GridView Web 服务器控件列宽

    ASP.NET 如何:动态设置 GridView Web 服务器控件列宽 默认情况下,会自动调整 GridView 控件中列的大小.列将呈现为不含宽度信息的 HTML 表单元格(td 元素):大多数浏 ...

  8. Asp.net控件之异同:HTML控件与Web服务器控件

    Asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等.这里我主要说说html控件.html服务 ...

  9. Spring Boot——自定义Web配置类后无法访问/static文件夹下静态资源

    问题描述 自定义Web配置类后无法访问 /static文件夹下静态资源. 已加相关依赖包. 官方文档 Spring MVC Auto Configuration Maven <dependenc ...

最新文章

  1. 旷视发布《人工智能应用准则》,倡导AI技术健康可持续发展
  2. day31 logging 日志模块
  3. 页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理
  4. WinCE中命令行工具Viewbin简介
  5. select,poll,epoll的归纳总结区分
  6. Struts2之异常处理
  7. transform-origin用于设置变换原点
  8. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_1 Mybatis中编写dao实现类的使用方式-查询列表...
  9. wcf 接收post数据_简单聊下HTTP中POST和GET请求本质区别
  10. 物联网控制的智能LED灯带(1):WS2812灯带控制(WS2812/2811,ESP32,NODE-RED)
  11. 计算机怎么格式化电脑吗,怎么格式化电脑
  12. java作品_50幅惊艳的分形艺术作品
  13. 基于Phyton爬虫索引设计与实现答辩PPT模板
  14. ping 127.0.0.1和ping本地ip、ping网关、ping远程网站分别测试什么
  15. 编程大实践 数独破解 #Cilay #嵩天
  16. excel2010免费下载与安装
  17. 怎么裁剪音频?这个方法建议收藏备用
  18. Alpine Linux添加Let's Encrypt CA证书或者自签CA证书
  19. php读取excel文件的数据,如何使用php获取excel文件数据
  20. 手把手教你搭建台服DNF

热门文章

  1. k3服务器端的虚拟,k3服务器 客户端配置
  2. 计算机英语小短文单词易懂,求计算机英语短文译文。。。。急急急!悬赏10
  3. python123第九周测验答案2020_知到智慧树2020艺术概论章节测验答案
  4. Pytest之收集用例及命令行参数
  5. PIP scrapydo时报错ERROR: Command errored out with exit status 1: python setup.py egg_info Check the log
  6. 区块链酒廊BTC Lounge正式启动运营
  7. 小微数字风控必学-冷启动开发风险评分(含实操)
  8. MySQL高级知识(八)——ORDER BY优化
  9. djaogo配置session使用redis
  10. Mysql中把varchar类型的字段转化为tinyint类型的字段