文章内容

 

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

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

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

  1.  
    文章内容
  2.  
     
  3.  
    本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程。
  4.  
     
  5.  
    文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中。
  6.  
     
  7.  
    本文创建一个简单的服务器控件,名为 RedLabel。 它的使用方式为:

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

步骤

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

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

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

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

配置程序集属性

 

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

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

using System.Web.UI;

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

 [assembly: TagPrefix("MyControl", "f")]

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

代码说明

 

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

在页面中使用自定义控件

 

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

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

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

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

  1.  
    <?xml version="1.0"?>
  2.  
    <configuration>
  3.  
    <system.web>
  4.  
    <pages>
  5.  
    <controls>
  6.  
    <add tagPrefix="f" Assembly="MyControl"
  7.  
    namespace="MyControl">
  8.  
    </add>
  9.  
    </controls>
  10.  
    </pages>
  11.  
    </system.web>
  12.  
    </configuration>

测试控件

 

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

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

运行效果

 
 

资源:

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. Python学习day43-数据库(多表关系)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  2. VS2017装了西红柿插件之后,启动很多次才能启动成功,进程有很多devenv.exe但是就是无法启动成功

    VS2017装了西红柿插件之后,启动很多次才能启动成功,进程有很多devenv.exe但是就是无法启动成功,这个可能是西红柿插件visual assist的问题 启动vs命令行 输入: devenv ...

  3. CSS3 进阶

    background-clip指定了背景可以覆盖到什么范围.background-origin指定了背景从什么位置开始.在例子中设置背景平铺应该可以看得清楚些. CSS3之前的背景,按规定是不会进入到 ...

  4. jeecms各种标签类(大部分,并没有包含一些其他的如text_cut html_cut之类)

    软件包 comjeecms.cms.action.directive 类摘要 ChannelDirective 栏目对象标签 ChannelListDirective 栏目列表标签 ChannelPa ...

  5. 原生JS实现简易计算器

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]

    从hibernate3升级到4应该会遇到 应该添加引用 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 ...

  7. JS基础之EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  8. dubbo admin详解

    运行 dubbo-admin的启动运行其实是一个比较简单的操作,但是由于它采用了前后端分离,前端又是使用的node.js,如果有不熟悉的同学会容易踩坑. 这里只简单介绍一下步骤: 1.从github下 ...

  9. U盘安装Linux CentOS 6.8 系统

    1.插入U盘在服务器中的USB接口: 2.选择启动的U盘进入装系统的页面: 3.选择English,按ok: 4.选UEFI:SanDisk Cruzer Edge 1.26 5.选 us 按 ok ...

  10. JasperReport生命周期3

    JasperReports的主要目的是为了在一个简单而灵活的方式创建页面为导向,准备好打印文档.下面的流程图描述了一个典型的工作流程,同时创建报表. 如在图片的生命周期具有以下明显的阶段 设计报表在这 ...