本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程。

文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中。

本文创建一个简单的服务器控件,名为 RedLabel。 它的使用方式为:

1
<f:redlabel text="this is a test !" runat="server"></f:redlabel>

这个标签会将自己的Text属性值以红色的样式输出到页面上。运行结果如图所示:

步骤

新建一个空白解决方案,在此解决方案下新建一个类库项目,名称为MyControl。在类库中新建一个服务器端控件,名称为RedLabel。如图所示:

打开RedLabel类,将整个类的代码修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace MyControl
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:RedLabel runat=server><!--{0}:RedLabel-->")]
    public class RedLabel : Label
{
        //重写RenderContent函数,输出控件内容
        protected override void RenderContents(HtmlTextWriter output)
        {
            //将自己的Text属性(继承自Label类)值使用红色样式输出
            output.Write("<div style="color:red">" + Text + "</div>");
        }
    }
}

至此自定义label控件编写完毕。

配置程序集属性

1. 打开类库项目下的程序集属性文件:AssemblyInfo.cs,如图所示:

1. 在文件开头添加下面代码:

1
<strong>using System.Web.UI;</strong>

2. 在文件末尾添加下面的代码:

1
<strong> [assembly: TagPrefix("MyControl", "f")]</strong>

其中MyControl是命名空间的名称。f是自定义控件的标签前缀。

代码说明

如果控件要呈现在客户端浏览器中不可见的元素(如隐藏元素或 meta 元素),则应从 System.Web.UI.Control 派生该控件。 WebControl 类从 Control 派生,并添加了与样式相关的属性,如 Font、ForeColor 和 BackColor。 另外,自定义控件通过重写 RenderContents 方法将文本写入响应流中。

在页面中使用自定义控件

要在页面中使用自定义控件,需要事先进行注册,注册的目的是将控件的前缀和命名空间进行映射,这样就能通过标签名找到标签对应的实现类。注册的方式有两种

1.在页面中使用@ Register指令,如以下示例所示:

1
<%@ RegisterAssembly="ServerControl" TagPrefix="aspSample” Namespace="ServerControl"%>

2.在 Web.config文件中指定标记前缀/命名空间映射。 如果将在 Web应用程序的多个页中使用自定义控件,则该方法非常有用。 下面的示例显示了一个 Web.config文件,该文件指定了程序集MyControl中命名空间MyControl和标签前缀f的映射。

1
 
1
2
3
4
5
6
7
8
9
10
11
<!--?xml version="1.0"?-->
<configuration>
  <system.web>   
   <pages>
     <controls>
        
       </add>
     </controls>
   </pages>
  </system.web>
</configuration>

测试控件

在解决方案下新建web项目,在web项目中新建apsx页面,在页面中引入自定义控件(注意,控件前缀需要注册)。比如以下页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ Page Language="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="MyControl.Web._Default" %>
<%@ Register Assembly="MyControl"TagPrefix="f"Namespace="MyControl" %>
htmlPUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
<htmlxmlns="http: www.w3.org="" 1999="" xhtml"="">
<headrunat="server">
   <metahttp-equiv="content-type"content="text html;="" charset="utf-8"/">
   <title></title>
 
 
   <formid="form1"runat="server">
        <div>
            <f:redlabeltext="this is="" a="" test="" !"runat="server">
        </f:redlabeltext="this></div>
    
 
</formid="form1"runat="server"></metahttp-equiv="content-type"content="text></headrunat="server"></htmlxmlns="http:>

运行效果

资源:

MSDN创建服务器控件:http://msdn.microsoft.com/zh-cn/library/yhzc935f(v=vs.100).aspx

ASP.NET自定义服务器控件的更多相关文章

  1. ASP.NET 自定义服务器控件

    文章内容   本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel.  ...

  2. (九)ASP.NET自定义用户控件(2)

    http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...

  3. ASP开发中服务器控件和普通控件的区别

    1.对于服务器按钮控件(即<asp:Button>类型的按钮):服务器响应事件:OnClick客户端响应属性:OnClientClick 2.对于html按钮控件(即<input t ...

  4. 【转】ASP.NET中服务器控件Table动态生成表格及其属性介绍

    下文所有内容转自开源中国:http://www.oschina.net/question/565065_86453#tags_nav ================================= ...

  5. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  6. 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式

    连表查询都用Left Join吧   最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...

  7. ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  8. (八)ASP.NET自定义用户控件(1)

    http://blog.csdn.net/laodao1/article/details/5897366 ASP.NET自定义控件组件开发 第一章:从一个简单的控件谈起 起始开发ASP.NET自定义控 ...

  9. [置顶] ASP.Net中服务器控件的生命周期

    (1)初始化:在此阶段中,主要完成两项工作:一.初始化在传入Web请求生命周期内所需的设置;二.跟踪视图状态.首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重 ...

随机推荐

  1. 用HackRF和Gqrx来听FM广播

    本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...

  2. android listview addheaderview viewpager

    just set viewPager's onTouchListener,like this: viewPager.setOnTouchListener(new OnTouchListener() { ...

  3. 1085. Perfect Sequence (25)-水题

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  4. 链家鸟哥:从留级打架问题学生到PHP大神,他的人生驱动力竟然是?

    链家鸟哥:从留级打架问题学生到PHP大神,他的人生驱动力竟然是?| 二叉树短视频 http://mp.weixin.qq.com/s/D4l_zOpKDakptCM__4hLrQ 从问题劝退学生到高考 ...

  5. 12.22daily_scrum

    今天是我们小组M2阶段开始一周结束,各项工作进入一个阶段性的总结过程,悬浮窗的设计也已经告一段落进入调试的阶段,新的工作任务有了添加,即滑锁密码的加入,更好地加深了用户体验性,软件的可用性也进一步加强 ...

  6. ElasticSearch 2 (2) - Setup

    ElasticSearch 2.1.1 (2) - Setup Installation Elasticsearch can be started using: $ bin/elasticsearc ...

  7. Jira 的 数据库备份恢复 简单过程

    1 发现jira的备份恢复很简单, 只需要导入导出一个zip包即可 导出 选择系统 管理员入口登录 选择导入导出 进行备份系统数据 选择一个文件名就能备份 备份结果 将文件copy到上一一级目录的 i ...

  8. Jenkins发送邮件中文乱码问题解决

    在环境变量中添加: JAVA_TOOL_OPTIONS  =  -Dfile.encoding=UTF8 配置好后,重启Jenkins即可

  9. 神奇的Redis延迟

    最近在做某业务Redis的缩容工作,涉及到数据迁移,而Redis的数据迁移看起来蛮简单的,一对一的数据迁移只需要在slave行配置masterauth 和slaveof 两个参数即可,当然迁移过程中涉 ...

  10. [代码]--db2中left()函数和right()函数对应oracle中的substr()函数

     DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LEFT.RIGHT函数返回ARG最左边.右边的LENGTH个字符串,ARG可以是CHA ...