『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
2024-10-20 01:38:17
代码:
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源码在线阅读
最新文章
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(八)资源搜索模块
- js使用模板快速填充数据
- codeforces B - Preparing Olympiad(dfs或者状态压缩枚举)
- python数据库(mysql)操作
- 用mysql触发器实现log记录
- 中文版Windows 7下设置日语格式布局的键盘
- 实现Java JTable的应用案例
- fast_recovery_area无剩余空间(ORA-19815)
- C++ STL之查找算法
- 1002 GTY&#39;s birthday gift
- epub格式电子书剖析之三:NCX文件构成
- C蛮的全栈之路-node篇(一) 环境布置
- python抓取NBA现役球员基本信息数据并进行分析
- ItunesConnect:";Missing Push Notification Entitlement";警告-----以及解决方法
- 学习C语言,在软件测试中如何用?
- myeclipse无法部署项目的解决
- c#: 界面多语言动态切换简单实现
- P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】
- 【bzoj1089】严格n元树
- 【转】 oracle 层次查询判断叶子和根节点
热门文章
- 在WINDOWS中安装使用SIGPACK(MinGW64+Sublime Text3 &;Visual Studio)
- 给树莓派开启samba服务
- 英语知识积累-D01-body+animal
- ubuntu系统下matplotlib中文乱码问题
- c# asp.net mvc使用斑马GK888t打印机打印标签
- Cocos2d-js和Android交互
- PHP 清除 Excel 导入的数据空格
- vue-cli+mock.js+axios模拟前后台数据交互
- 用java从0生成一个简单的excel
- esb和eai的区别