服务器控件开发(二)

  区分Control类和WebControl类:

    服务器控件可以继承自这两个类;

    探究这个两个类的区别,以及这两个类分别适用在哪种情况!

    本文的学习过程中,使用到的类库为ControlLibrary,这个类库可以自己命名;

    首先编写一个继承自Control类的SimpleControl控件:类库中新建一个SimpleControl类

using System;
using System.Web;
using System.Web.UI;

namespace ControlLibrary
{  //继承Control类
    public class SimpleControl:Control
    {     //重载Render方法
        protected override void Render(HtmlTextWriter writer)
        {       //调用HtmlTextWriter的Write方法,向页面写入内容
            writer.Write("This  is  my  first Control");
        }
    }
}

  

    再编写一个继承自WebControl类的SimpleWebControl;类库中新建一个SimpleWebControl类

    具体代码:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ControlLibrary
{
    public class SimpleWebControl:WebControl
    {
        private int _number;

        public int Number
        {
            get
            {
                return _number;
            }

            set
            {
                _number = value;
            }
        }
     //默认标签为<span>
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }

        protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
        {
            writer.Write("This is my first  WebControl");
            writer.Write("<br>");
            writer.Write("this  WebControl  property is Number");
            writer.Write("<br>");
            writer.Write("this Number is :");
            writer.Write(Number);

        }
    }
}

  页面中代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebSite.Default" %>
//服务器控件注册
<%@ Register TagPrefix="nsp" Namespace="ControlLibrary" Assembly="ControlLibrary" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link rel="stylesheet" href="Style/Site.css" type="text/css" />
    <title></title>
</head>
<body>

    <nsp:SimpleControl runat="server"/>
    <br/>
    <br/>
    <nsp:SimpleWebControl runat="server"/>
</body>
</html>

  

  通过这两个简单的控件(单标签),我们可以发现一些基础的区别:

      继承自Control的控件:

      通过重载Render来向Html响应流中写入内容;

      无默认标签,直接写入页面中

      不带有样式设计

      继承自WebControl的控件:

      通过重载RenderContents来向Html写入内容;

      默认一个<span>标签,并将内容存放进入(重载HtmlTextWriterTag可以使用其他标签)

      默认带有样式设计

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  分别用继承自Control和WebControl,来编写一个复杂的控件(多标签):

    

    继承自Control,新建一个ComplexControl类:

using System;
using System.Web;
using System.Web.UI;

namespace ControlLibrary
{
    public class ComplexControl:Control
    {
        private string _name;

        public string Name
        {
            get
            {
                return _name;
            }

            set
            {
                _name = value;
            }
        }

        //确定此控件没有子控件
        protected override ControlCollection CreateControlCollection()
        {
            return new EmptyControlCollection(this);
        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Id,this.UniqueID);
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor,"red");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle,"solid");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("请输入用户名");
            writer.RenderEndTag();//td
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name,"Username");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();//input
            writer.RenderEndTag();//td
            writer.RenderEndTag();//tr

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("请输入密码");
            writer.RenderEndTag();//td
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Password");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();//input
            writer.RenderEndTag();//td
            writer.RenderEndTag();//tr

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Type,"button");
            writer.AddAttribute(HtmlTextWriterAttribute.Value,"登录");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();//input
            writer.RenderEndTag();//td
            writer.RenderEndTag();//tr
            writer.RenderEndTag();//table
        }
    }
}

    

时间: 2025-01-05 02:27:56

服务器控件开发(二)的相关文章

Asp.Net服务器控件开发的Grid实现(二)

我们先来实现Grid类,代码如下: Grid.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI; namespace AspNetS

Asp.Net服务器控件开发的Grid实现(一)

使用Asp.Net做Web开发时,系统提供的控件,有时难以达成所要的目的.这时,有多种方式可以解决,比如采用html+js的形式,在前端布局出所要的界面,然后再通过ajax等方式去获取数据,以达成目的. 但这样做,很是费劲,特别是当布局出来的界面需要重用的时候,更加费劲.有人,会直接将该界面的代码进行拷贝,但这对后来的维护必然带来更大的问题.所以就考虑,有没有一种方式可以让布局得到重用,又便于维护的.Asp.Net的控件可以很方便的布局,同时又能在后台中直接操作控件,实现相关的数据逻辑.所以就想

Asp.Net服务器控件开发的Grid实现(四)回发事件

在使用Grid的时候,会用到链接跳转.如果只是普通的链接跳转,那只要使用a标签的href就可以实现.但是有时,我们希望在链接跳转的时候,能够引发回发事件,在后台作出一定的处理,然后再跳转.这样要如何实现呢?我们可以定义一个LinkButtonField来实现.代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;

ASP.NET 2.0服务器控件开发的基本概念(转载)

利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情.因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表.客户端 脚本语言..NET开发语言.服务器控件开发技术,甚至是当前最火的AJAX技术等等.虽然现实如此"艰难",但是这种开发技术也不是真的难到不可掌握. 事事都要从头做起.本文将针对利用asp.net 2.0技术,创建Web自定义服务器控件的基础知识进行详细介绍,内容包括:服务器控件概念.控件类型.生命周期等. 1.ASP.NET

javaweb学习之Servlet开发(二)

javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1</servlet-name> 3 <servlet-class>gacl.servlet

iOS开发-二维码扫描和应用跳转

iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦,出错也不方便调试.在iOS7之后,苹果自身提供了二维码的扫描功能,从效率上来说,原生的二维码远高于这些第三方框架.本文讲解如何使用原生框架实现二维码扫描功能,并且进行扫描后的项目跳转.ps:本期的源代码会在文章结尾给出链接 扫描相关类 二维码扫描需要获取摄像头并读取

ExtJS 4.2 业务开发(二)数据展示和查询

本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统,并提供查询.添加.修改的功能. 大致的目录结构如下: ShipMgrTab.js :船舶业务的入口. controller 目录:存放船舶业务的逻辑控制文件. model 目录:存放船舶业务的model文件. store 目录 :存放船舶业务的store文件. view 目录 :存放船舶业务的组件

Python服务器开发二:Python网络基础

Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

平安科技移动开发二队技术周报(第三期)

平安科技移动开发二队技术周报(第三期) 业界新闻 1)关于AFNetworking 安全bug的回复 AFNetworking代码维护者对文章 utm_source=tuicool">流行iOS网络通信库AFNetworking曝SSL漏洞 中存在的不对的误导性描写叙述的回应. 2)跨平台移动端开发框架NativeScript 公布正式版本号 NativeScript就是一款由Telerik公司提出的跨平台原生移动应用的开发框架.该项目的目的是利用单一代码库构建面向多平台的原生移动应用程序