• Asp.net自定义控件开发任我行(2)-TagPrefix标签


    • 摘要

      前面我们已经做了一个最简单的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之间的关系

  • 相关阅读:
    洛朗级数
    泰勒级数
    中心极限定理
    置信区间公式
    简单随机样本的性质
    极大似然估计
    矩估计法
    摆摊70
    天天去哪吃
    天天和树
  • 原文地址:https://www.cnblogs.com/xuyubing/p/3324334.html
Copyright © 2020-2023  润新知