当前位置: 首页 > news >正文

『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(*)函数;

相关系列文章链接:

  • 『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
  • 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件
  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌CSS:将CSS封装到程序集中
  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来
  • 『Asp.Net 组件』Demo源码在线阅读

相关文章:

  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件
  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌CSS:将CSS封装到程序集中
  • 『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
  • Linux系统中的文件目录介绍——Linux system files in the directory structure is introduced
  • 『开源』字符串匹配引擎
  • java 新 IO 的运用
  • 『开源』源码在线阅读工具
  • 视频编解码学习:理论基础
  • 每天一道算法_4_Hangover
  • 一初探js特效魅力之鼠标悬浮事件01
  • linux系统的组成——The composition of the Linux system
  • snprintf与printf
  • 一初探js特效魅力之div显示隐藏变色02
  • 帮豆包刷“天天爱消除”,“天天连萌”
  • 『开源』一个简单的 字符串计算 算法开源
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Laravel5.4 Queues队列学习
  • leetcode98. Validate Binary Search Tree
  • MQ框架的比较
  • spring学习第二天
  • Vue 动态创建 component
  • 彻底搞懂浏览器Event-loop
  • 初识 beanstalkd
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 将 Measurements 和 Units 应用到物理学
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 你真的知道 == 和 equals 的区别吗?
  • 判断客户端类型,Android,iOS,PC
  • 嵌入式文件系统
  • 巧用 TypeScript (一)
  • 删除表内多余的重复数据
  • 数据可视化之 Sankey 桑基图的实现
  • 数组的操作
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ionic异常记录
  • 如何用纯 CSS 创作一个货车 loader
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ( 10 )MySQL中的外键
  • (39)STM32——FLASH闪存
  • (C)一些题4
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (第27天)Oracle 数据泵转换分区表
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)【Hibernate总结系列】使用举例
  • (转)h264中avc和flv数据的解析
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ***监测系统的构建(chkrootkit )
  • **PHP分步表单提交思路(分页表单提交)