ASP.NET是否存在客户端控件?
在很久很久以前,传说。。。在ASP.NET开发中,使用服务端控件,比客户端控件更加损耗性能。。。 那么ASP.NET中是否有客户端控件呢? 有些人就说了,打开VS,然后在左边,工具箱里,有个HTML部分,就是客户端控件。
那么,这种说法是否正确呢?图上的那些控件,是“客户端控件”???
事实上,在ASP.NET的开发中,根本不存在所谓的“客户端控件”。这是由于缺乏对ASP.NET的了解导致的,多数是由于只看过入门书籍的人,才会有这样的想法和认识。
你拖拽一个HTML里面的的Input(Button)标签到页面上,会发现设计页面上出现了如下一行代码:
<input id="Button1" type="button" value="button" />
后面没有了runat = server就代表它是“客户端控件”了?
简直是无稽之谈。
它是什么?它是一个LiteralControl类型的服务端控件。
它保存在在 System.Web.dll 里面。
仔细看看它的定义:
public class LiteralControl : Control, ITextControl
一目了然,是一个标准的服务端控件【也可以叫服务器控件】。
再看看它所属的类的结构。
继承层次结构:
System..::.Object System.Web.UI..::.Control System.Web.UI..::.LiteralControl
牢记一点:在ASP.NET开发中,不存在客户端控件的说法。
有些朋友质疑:你怎么知道这些HTML组的控件的类型是LiteralControl呢?
这说明你没有阅读过MSDN,至于原文我就不复制了,大家打开文档自己看。
我直接贴代码,讲逻辑:
首先,你创建一个aspx页面,然后拖拽一个label和一个HTML组的button上去,如图:
编译器自动生成代码如下:
<div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> <br /> <input id="Button1" type="button" value="buttonnnnnnn" /> </div>
为了让大家一目了然,我把这个简单的页面也编译成一个网站,
然后发布。
在bin目录中,把Default页面生成的动态链接库提取出来,然后我们反编译一下其中的这个default.aspx页面的类的源代码:
private HtmlForm __BuildControlform1() { HtmlForm form = new HtmlForm(); base.form1 = form; form.ID = "form1"; IParserAccessor accessor = form; accessor.AddParsedSubObject(new LiteralControl("\r\n <div>\r\n \r\n ")); Label label = this.__BuildControlLabel1(); accessor.AddParsedSubObject(label); accessor.AddParsedSubObject(new LiteralControl("\r\n \r\n <br />\r\n <br />\r\n <input id=\"Button1\" type=\"button\" value=\"buttonnnnnnn\" /></div>\r\n ")); return form; } private Label __BuildControlLabel1() { Label label = new Label(); base.Label1 = label; label.ApplyStyleSheetSkin(this); label.ID = "Label1"; label.Text = "Label"; return label; }
这样,总算是一目了然了吧?相信看了这个代码,朋友们就会了解.NET FRAMEWORK是如何处理和解析控件库的。你还认为使用HTML工具箱里的控件,就是所谓的“客户端控件”吗?
大家还记得runat="server"属性,如果一个标签包含了这个属性,那么,ASP.NET运行库会创建一个具体的类的一个实例,否则,如果不指定这个属性,则编译成一个LiteralControl对象。【也别忘记,作为控件唯一的标示性ID的重要性不言而喻】
ASP.NET页的上下文中出现的一切,都被看做是控件【包括iframe,DIV,span等等等等】。
希望朋友们以后不要再被那些所谓的“听说”“传说”“XX说”所误导,
加深对.NET FRAMEWORK的学习和理解。
那么,在追求性能的时候,要注意什么事情呢?
说点个人看法:当你盲目追求所谓的高性能的时候,是否忽略了开发周期和以后的维护呢?你的那点性能提高,对用户,有用吗?如果追求性能的极致,为什么不用机器语言写呢?你所谓的技巧,远不如那些比较成熟的解决方案来的容易。那些想当然的,或者是传说的技巧,能带来的性能提升,往往是在你没有接触过其他解决方案的时候,才能给你带来一些快感罢了。
这种事情不能想当然,你每想当然一次,可能给其他人带来很多烦恼。。。
这样,总算是一目了然了吧?相信看了这个代码,朋友们就会了解.NET FRAMEWORK是如何处理和解析控件库的。你还认为使用HTML工具箱里的控件,就是所谓的“客户端控件”吗?
大家还记得runat="server"属性,如果一个标签包含了这个属性,那么,ASP.NET运行库会创建一个具体的类的一个实例,否则,如果不指定这个属性,则编译成一个LiteralControl对象。【也别忘记,作为控件唯一的标示性ID的重要性不言而喻】
ASP.NET页的上下文中出现的一切,都被看做是控件【包括iframe,DIV,span等等等等】。
希望朋友们以后不要再被那些所谓的“听说”“传说”“XX说”所误导,
加深对.NET FRAMEWORK的学习和理解。
那么,在追求性能的时候,要注意什么事情呢?
说点个人看法:当你盲目追求所谓的高性能的时候,是否忽略了开发周期和以后的维护呢?你的那点性能提高,对用户,有用吗?如果追求性能的极致,为什么不用机器语言写呢?你所谓的技巧,远不如那些比较成熟的解决方案来的容易。那些想当然的,或者是传说的技巧,能带来的性能提升,往往是在你没有接触过其他解决方案的时候,才能给你带来一些快感罢了。
这种事情不能想当然,你每想当然一次,可能给其他人带来很多烦恼。。。
转载:http://hi.baidu.com/44498/item/2607534e09d8290ee8350492?qq-pf-to=pcqq.c2c
ASP.NET是否存在客户端控件?的更多相关文章
- (转)客户端触发Asp.net中服务端控件事件
第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...
- Asp.Net 之 服务器端控件与客户端控件的区别
服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制 ...
- 由Asp.Net客户端控件生成的服务器端控件
由Asp.Net客户端控件生成的服务器端控件(也就是给客户端控件添加 runnat="server"),这样的控件既能在js中通过id命.类名获取到,也能在服务器端根据id获取到
- asp.netajax开发应用心得-accordation控件的事件处理
今天,再次运行以前的项目时,发现按钮的单击事件不起作用了,加了断点之后发现根本没有触发该事件.... 按照网上找到的答案,有的说把控件删掉重新拖拽一个进去,虽然以前也遇到过控件失效,重新拖拽有效的时候 ...
- Webform——服务器控件与客户端控件
Webform,即BS,浏览器应用. 关于服务器和客户端,在Webform 中, 服务器就相当于后台(也就是编辑C#代码的地方), 客户端相当于前台(也就是Html页面). 用法: ①如果想在服务器 ...
- ASP.NET服务端基本控件介绍
ASP.NET服务端基本控件介绍 大概分为三种控件: HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法在服务端进行处理ASP.NET服务端控件,经过ASP. ...
- asp.net中的ListBox控件添加双击事件
问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...
- asp.net学习之Repeater控件
asp.net学习之Repeater控件 文章摘自:http://www.cnblogs.com/shipfi/archive/2009/10/19/1585703.html Repeater控件和D ...
- 《ASP.NET1200例》ListView 控件与DataPager控件的结合<二>
ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示 为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己 ...
随机推荐
- mysql小技巧
将一列值赋予另一列 会遇到新增一列, 需要用其他列的值来初始化这一列 或者根据业务条件把某行的某列值直接赋予到其他列. 行号 列1 列2 1 aaa ddd 2 bbb ccc UPDATE 表 SE ...
- Dubbo学习之简单环境搭建
Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...
- jdbc java数据库连接 7)获取插入数据的自增长值
我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...
- 子DIV设置margin-top影响父DIV位置的解决办法
父div如果没有任何东西,子div设置margin-top,父div会下落 <!DOCTYPE html> <html lang="en"> <hea ...
- JavaScript自动生成博文目录导航
转载于:JavaScript自动生成博文目录导航 我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到 具体的内容 ...
- 使用FastReport打印二维码
简单介绍一下该功能所在的项目背景:C#语言编写的WPF客户端应用程序,在“结账”模块中,打印出的收款小票上需要显示一个二维码,服务生拿着小票去找顾客,顾客可以选择现金.银行卡等普通支付方式,也可以直接 ...
- 基于modelsim-SE的简单仿真流程—下
基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...
- 在Eclipse中使用建立使用Gradle做依赖管理的Spring Boot工程
前述: Gradle存在很长时间了,以前只知道Maven和ivy ,最近才知道有这个存在,因为以后要用这个了; 所以,要先学会怎么用这个工具,就从建立一个简单工程开始! 实际上以前是见过Gradle的 ...
- HTML <meta> 标签,搜索引擎
关于Mate标签的详尽解释,请查看w3school 网址为:http://www.w3school.com.cn/tags/tag_meta.asp meta标签作用 META标签是HTML标记HEA ...
- 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...