欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

『asp.net 组件』第一个 asp.net 服务器组件:自各儿的文本框控件

更新时间: 2014-01-05 01:50:09 责任编辑: Author_N1

 

『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源码在线阅读

 

 

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:50:09
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1772/
本文WWW.DOC100.NET DOC100.NET版权所有。