『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 组件编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述