Asp.Netカスタムコントロール開発任我行(2)-TagPrefixラベル

17510 ワード

  • サマリ


  • 前述したように、最も簡単なTextBoxのベストを作成しました.この文章では、カスタムコントロールのラベルについて説明します.前回ドラッグアンドドロップしたコードを見たかもしれませんが
    、これは私たちが望んでいる結果ではありません.cc 1というラベルの命名はよくありません.そして、「水が多すぎる」と感じています.今、コードを改善します.
  • コードの変更

  • 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
    
        {
    
    
    
        }
    
    }

    実は1行のコードしか追加していませんが、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>

    ラベルがcc 1なのか、上の<%@Register Assembly="XYB.Controls"Namespace="XYB.Controls"TagPrefix="cc 1"%>TagPrefix="cc 1"を見ることができます.TagPrefix="cc 1"を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>

    ラベルが変更されましたです.今はやっと変わったが、よく考えてみると、私たちはもっと良い方法がある.その後、私たちはこのクラスライブラリを大きくして、中には多くのクラスがパッケージされています.まさか私たちは各ページに一言追加しますか?
    [assembly:TagPrefix("XYB.Controls","XYB],<%@Register Assembly="XYB.Controls"Namespace="XYB.Controls"TagPrefix="XYB"%>ですか?これは明らかに科学的ではありませんが、メンテナンスが難しいとは言わず、後で軽蔑されることもありますが、やはり多くの繰り返し作業があります.
  • プロファイルの変更


  • Webを修正します.configファイル、ノードの下に次のコードを追加
                                                         
    プロファイル全体のコードは次のとおりです.
    <?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の関係を議論します.