• 摘要

  前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签。大家可能看到了上一篇中拖放进来的代码是

<cc1:TextEdit ID="TextEdit1" runat="server"></cc1:TextEdit>,这肯定不是我们想要的结果了,cc1这种标签命名不好,而且给人感觉也“太水了”,现在我们来改进代码

  • 修改代码

using System;
using System.Text;
using System.Web.UI;
using System.ComponentModel;//包含组件开发所必须含有的(属性)Attribute;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic; namespace XYB.Controls
{
[assembly:TagPrefix("XYB.Controls","XYB")]//命名空间+标签名
public class TextEdit:TextBox
{ }
}

 其实我们就只加一行代码,我们再来看一下UI层的代码吧 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TextEditUI.aspx.cs" Inherits="XYB.UI.TextEditUI" %>

<!--此行代码是自动生成-->
<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server"> <!--标签还是没有发生什么变化-->
<cc1:TextEdit ID="TextEdit1" runat="server"></cc1:TextEdit> </form>
</body>
</html>

我们发现标签还是cc1,我们会看到上面的<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="cc1" %>
TagPrefix="cc1",我们只需要把TagPrefix="cc1"改成TagPrefix="XYB",现在我们再拖一个控件进来看看

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TextEditUI.aspx.cs" Inherits="XYB.UI.TextEditUI" %>

<!--此行代码是自动生成-->
<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="XYB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<!--标签还是没有发生什么变化-->
<cc1:TextEdit ID="TextEdit1" runat="server"></cc1:TextEdit>
<!--标签已经发生变化-->
<XYB:TextEdit ID="TextEdit2" runat="server"></XYB:TextEdit>
</form>
</body>
</html>

现在标签已经什么变化了<XYB:TextEdit ID="TextEdit2" runat="server"></XYB:TextEdit>。现在总算是变了,但是细想一下,我们还有更好的做法。以后我们把这个类库做大了,里面封装了好多类,难道我们是不是每个页面上都去加一句

[assembly:TagPrefix("XYB.Controls","XYB],<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="XYB" %>吗?这显然是不科学的,先不说维护起来困难,日后还会遭人鄙视,还是有很多的重复工作的。

  • 修改配置文件

    我们修改一下web.config文件,在<system.web>节点下面加上如下代码

    <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
            <controls>
                <add namespace="XYB.Controls" assembly="XYB.Controls" tagPrefix="XYB"/>
            </controls>
          </pages>

     我整个配置文件代码如下

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细消息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
<controls>
<add namespace="XYB.Controls" assembly="XYB.Controls" tagPrefix="XYB"/>
</controls>
</pages>
</system.web> </configuration>

现在我们把TextEditUI.aspx之前的拖进来的代码注释掉,或者删掉也行。把TextEdit类中的[assembly:TagPrefix("XYB.Controls","XYB")]代码也删掉。重新生成。

TextEdit.cs代码如下:

using System;
using System.Text;
using System.Web.UI;
using System.ComponentModel;//包含组件开发所必须含有的(属性)Attribute;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic; namespace XYB.Controls
{
public class TextEdit:TextBox
{ }
}

HTML代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TextEditUI.aspx.cs" Inherits="XYB.UI.TextEditUI" %>

<!--此行代码是自动生成-->
<%--<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="XYB" %>--%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<!--标签还是没有发生什么变化-->
<%--<cc1:TextEdit ID="TextEdit1" runat="server"></cc1:TextEdit> --%>
<!--标签已经发生变化-->
<%-- <XYB:TextEdit ID="TextEdit2" runat="server"></XYB:TextEdit>--%> </form>
</body>
</html>

我们再来拖进一个控件进来,标签还是发生改变

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TextEditUI.aspx.cs" Inherits="XYB.UI.TextEditUI" %>

<!--此行代码是自动生成-->
<%--<%@ Register Assembly="XYB.Controls" Namespace="XYB.Controls" TagPrefix="XYB" %>--%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<!--标签还是没有发生什么变化-->
<%--<cc1:TextEdit ID="TextEdit1" runat="server"></cc1:TextEdit> --%>
<!--标签已经发生变化-->
<%-- <XYB:TextEdit ID="TextEdit2" runat="server"></XYB:TextEdit>--%> <XYB:TextEdit ID="TextEdit1" runat="server"></XYB:TextEdit> </form>
</body>
</html>

至此,才算是真的大功告成。

  • 下集预告:

  Render呈现控件,并讨论Render,RenderControl,RenderChilden之间的关系

Asp.net自定义控件开发任我行(2)-TagPrefix标签的更多相关文章

  1. Asp.net自定义控件开发任我行(1)-笑傲江湖

    1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...

  2. Asp.net自定义控件开发任我行(3)-Render

    摘要 上一篇我们讲到了自定义标签TagPrefix用法,此篇我们来讲一下控件的呈现,主要是呈现下拉框 内容 呈现的方法有,Render,RenderControl,RenderChildren,这三个 ...

  3. Asp.net自定义控件开发任我行(附1)-属性一览众山小

    元数据属性应用于服务器控件及其成员,从而提供由设计工具.ASP.NET 页分析器.ASP.NET 运行库以及公共语言运行库使用的信息.当页开发人员在可视化设计器中使用控件时,设计时属性能改进开发人员的 ...

  4. Asp.net自定义控件开发任我行(4)-ViewState保存控件状态

    摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...

  5. Asp.net自定义控件开发任我行(8)-数据集绑定

    摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...

  6. Asp.net自定义控件开发任我行(5)-嵌入资源上

    摘要 上一篇我们讲了VitwState保存控件状态,此章我们来讲讲嵌入css文件,js文件,嵌入Image文件我也一笔带过. 内容 随着我的控件的完善,我们目标控件DropDwonCheckList最 ...

  7. Asp.net自定义控件开发任我行(7)-注册自定义事件

    摘要 前面我们已经把嵌入资源讲完了,不知道大家有没有得到收益,本章主要讲自定义事件,也就是给TextBox注册一个点击事件. 引言 不知道道上的朋友有没有注意到TextBox控件没有点击事件,就连网上 ...

  8. Asp.net自定义控件开发任我行(6)-嵌入资源下

    摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...

  9. Asp.net 自定义控件开发相关的几种嵌入资源解决方案

    前提: 如下将要介绍的几种类型资源都要在其属性页窗口, 将 <生成操作> 属性, 设置为[嵌入的资源], 如图:   ► 给自定义控件添加自定义图标的几种方案   方法一: 直接在自定义控 ...

随机推荐

  1. 使用visio创建数据库模型

    使用软件:visio 2007 下载地址:https://pan.baidu.com/s/1i4LG1Id 主要参考:http://blog.csdn.net/zhang_xinxiu/article ...

  2. C#中Dictionary泛型集合7种常见的用法

    要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib)  Dictionary的描述1.从一组键(Key)到一组值( ...

  3. 几幅手稿讲解CNN

    学习深度神经网络方面的算法已经有一段时间了,对目前比较经典的模型也有了一些了解.这种曾经一度低迷的方法现在已经吸引了很多领域的目光,在几年前仅仅存在于研究者想象中的应用,近几年也相继被深度学习方法实现 ...

  4. [Jira]启动报错无法删除缓存文件felix-cache的解决方法

    背景: 由于公司机房停电,jira服务器在停电期间需要关机处理,然而待重启启动服务时,jira出现报错,页面报错信息如下: Unable to clean the cache directory: / ...

  5. linux 命令——40 wc (转)

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  6. 忽略mysql库的同步

    忽略mysql库的同步,请使用: stop slave sql_thread; change replication filter replicate_ignore_db=(mysql);

  7. 转载请注明:Windows 系统必备好用软件&工具合集跟推荐 | 老D博客

    Windows 系统必备好用软件&工具合集跟推荐 97 63,371 A+ 所属分类:工具软件 一.浏览器 二.下载软件 三.播放软件 五.电子邮件客户端 六.图片/照片 浏览查看工具 七.文 ...

  8. Matlab 中实用数据结构之 containers.Map

    概要   熟悉 Python 的都知道字典 Dict 类型数据结构功能的强大,Matlab 中虽然有表结构,但是其列名必须是亦变量名类型的字符串,如果我想用数字开头的字符串作键值,其表结构就无能为力了 ...

  9. basic_double_stream_incorrect

    不合理的代码 /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and ...

  10. [JZOJ] 5935. 小凯学数学

    由Noip2018初赛的知识得,a|b + a&b = a+b 设计一个区间dp,设\(f[l][r][x]\)表示区间\([l,r]\)能否构成\(x\),数据不大,转移暴力枚举 复杂度\( ...