zoukankan      html  css  js  c++  java
  • 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件

    代码:

    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace DemoWebControl
    {
        /// <summary>
        /// 自己的第一个服务器组件 简单的TextBox:直接拼接HTML输出(一种捷径写法,运行速度相对也快)
        /// </summary>
        public class DemoTextBox : WebControl
        {
            protected bool IsDesignMode
            {
                get { return DesignMode || HttpContext.Current == null || Page == null; }
            }
            //改写微软底层 HTML 的拼接方法:但是 很多自定义属性 将自己拼接
            protected override void Render(HtmlTextWriter output)
            {
                output.Write("<input type="text" id="" + ClientID + "" name="" + ClientID + 
                    "" class="" + CssClass + "" value="第一个TextBox" />");
            }
        }
    
        /// <summary>
        /// 自己的第一个服务器组件 简单的TextBox:界面HTML输出基于微软底层的函数
        ///(符合微软的标准写法,功能强大,但速度相对可能慢一些,用 ILSpy 反射 WebControl 的代码就明白了)
        /// </summary>
        public class DemoTextBox2 : WebControl
        {
            public DemoTextBox2() : base(HtmlTextWriterTag.Input) { }
            //没有改写微软底层 HTML 的拼接方法:微软会 帮助 拼接 很多自定义属性(所以说 功能强大)
        }
    }
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoTextBoxPage.aspx.cs" 
    Inherits="AspNetDemo.DemoTextBoxPage" %>
    <%@ Register assembly="DemoWebControl" namespace="DemoWebControl" tagprefix="Demo" %>
    
    <!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">
        <style type="text/css">
            .Demo{ border: 1px solid RED; }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <Demo:DemoTextBox ID="MyText" CssClass="Demo" runat="server" />
            <Demo:DemoTextBox2 ID="MyText2" CssClass="Demo" type="text" value="文本值" runat="server" />
    
        </div>
        </form>
    </body>
    </html>

    运行截图:

     

     

    相关技术点:

    • 微软Asp.Net服务器组件 输出成为HTML代码的主要函数是:Render(HtmlTextWriter output);
    • 如果你反编译 Render(*) 函数的话,你会发现 微软的代码 特别复杂(保守估计相关执行代码 >1000行,相关for循环 >4个);
    • 当然,绝不是微软喜欢将简单的事情复杂化,而是 为了功能的全面(之前说过,微软很多技术 都是 功能强大,但是运行效率却靠后的);
    • 而 DemoTextBox 则基本简化了 Render(*) 的基本功能:你可以自己拼接 HTML;
    • 但是,你也看到了 DemoTextBox 最大弊端:不支持 自定义标签属性,不支持 style 属性(想要支持 需要自己写);
    • 当然,事实上 我们很多时候 简单的功能就行——这个就取决于 自定义Asp.Net服务器组件 的开发者如何编码 Render(*) 函数;

     

     相关系列文章链接:

     

     

  • 相关阅读:
    Stm32设置串口300波特率
    STM32F103ZET6移植FreeRTOS过程
    什么时候该用裸机?什么时候该用RTOS?
    又到了立flag时间
    关于掉电数据保存的心得
    一个教训
    下个月回国给自己定目标
    GPRS模块/4G开发过程
    ftp登陆失败,check pass; user unknown
    python深浅拷贝
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/20131006_002.html
Copyright © 2011-2022 走看看