博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义 Web 服务器控件
阅读量:6826 次
发布时间:2019-06-26

本文共 2841 字,大约阅读时间需要 9 分钟。

MSDN中关于本节内容的演练:

微软的介绍已经足够详尽,我这里只是简单的说一下如何自定义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\"> 
") ] 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的配置:

在页面中使用:

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

lblWelcome.Text = "欢迎访问,服务器时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2013/01/06/2847572.html,如需转载请自行联系原作者

你可能感兴趣的文章
算法整理-二叉树和堆栈
查看>>
SCUT个人整理的常见问题
查看>>
UIImageView动画 UISlider控制速度
查看>>
杂物论第一 中华文明的根基
查看>>
Thrift使用实例
查看>>
曲线的奇点
查看>>
单例模式
查看>>
287. Find the Duplicate Number
查看>>
将Android library开源到jcenter
查看>>
java线程池
查看>>
使用vue.js开发时的一些坑
查看>>
PHP 打印函数之 print print_r
查看>>
linux+xampp搭建WordPress个人网站过程详解
查看>>
深度解析大快DKadoop大数据运维管理平台功能
查看>>
基于Spark的机器学习实践 (七) - 回归算法
查看>>
企业级 SpringBoot 教程 (一)构建第一个SpringBoot工程
查看>>
阿里云有奖调查结果公布,赠送10个阿里巴巴logo胸针
查看>>
Golang学习笔记之WEB框架(gin)基本使用
查看>>
SAP人工智能服务Recast.AI的一个简单例子
查看>>
云栖科技评论90期:有两种“前沿科技”
查看>>