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
时间: 2024-10-15 11:57:34

ASP.NET是否存在客户端控件?的相关文章

Asp.Net 之 服务器端控件与客户端控件的区别

服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制操作,由客户端浏览器解释执行. 服务器控件需要回发执行,当首次打开页面时,需初始化.由runat属性指示的,runat的值有且仅为一值"server".通过添加runat属性,一般的HTML控件可以被很方便地转换到服务器端运行,下面是一个简单的例子:<input type="

asp.netajax开发应用心得-accordation控件的事件处理

今天,再次运行以前的项目时,发现按钮的单击事件不起作用了,加了断点之后发现根本没有触发该事件.... 按照网上找到的答案,有的说把控件删掉重新拖拽一个进去,虽然以前也遇到过控件失效,重新拖拽有效的时候,但这次没有起作用. 而后,继续寻找答案,有的说可能是form嵌套,可是查看源代码没有这个问题. 无意中,尝试在按钮中加了一个客户端单击事件: 复制代码代码如下: OnClientClick="return true" 竟然有效了: 复制代码代码如下: <asp:ImageButto

ASP.NET服务端基本控件介绍

大概分为三种控件: HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法在服务端进行处理ASP.NET服务端控件,经过ASP.NET高度封装的控件,运行在服务端,可以用C#代码进行操作,会渲染到客户端为HTML控件runat=server的HTML控件,在HTML控件中添加runat="server",也是运行在服务端,也可以用C#代码操作也会渲染成HTML,不像ASP.NET服务端控件那样高度封装,和服务端控件相比:如果控件没有被ASP.NET

Webform 服务器控件与客户端控件以及验证控件

Webform——服务器控件与客户端控件 Webform,即BS,浏览器应用. 关于服务器和客户端,在Webform 中, 服务器就相当于后台(也就是编辑C#代码的地方), 客户端相当于前台(也就是Html页面). 用法: ①如果想在服务器控件里调用客户端控件的js或Jquery函数,必须在服务器的控件中加上 onClientClick属性: <asp:Button ID="Button1" runat="server" OnClientClick="

Asp.NET之浅谈控件

一.web控件 1.文本框控件 TextBox控件 功能说明:用于显示文本和接收用户输入的文本 命名前缀:Txt ASPX代码: <asp:TextBox ID="TxtSample" runat="server" Text="TextBox Sample"></asp:TextBox> 重要属性:Text               显示在按钮上的文本 TextMode      设置文本的模式,"Single

Webform——服务器控件与客户端控件

Webform,即BS,浏览器应用. 关于服务器和客户端,在Webform 中,  服务器就相当于后台(也就是编辑C#代码的地方), 客户端相当于前台(也就是Html页面). 用法: ①如果想在服务器控件里调用客户端控件的js或Jquery函数,必须在服务器的控件中加上onClientClick属性: <asp:Button ID="Button1" runat="server" OnClientClick="tanchu()" OnCli

asp.net 自带ajax 控件的小实例

<form id="Form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <asp:Label ID="Label1" runat="server" Text="车牌号:

向asp.net项目中添加控件AspNetPager

1.打开项目,把.dll文件放入项目中: 2.在工具栏中添加一个自定义选项卡 3.右键选项卡,点击"选择项" 4.在打开的对话框中点击:"浏览" 5.找到要添加的控件文件AspNetPager.dll,确定,添加成功啦 向asp.net项目中添加控件AspNetPager

ASP.NET MVC显示UserControl控件(扩展篇)

昨晚Insus.NET有怀旧一下<念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件>http://www.cnblogs.com/insus/p/3641610.html 那仅是小小尝试,还有很多不明的地方. 那一篇其中有Render用户控件ascx的.如今Insus.NET想重构它一下,让步其能在Action或是Razor语法中使用. 创建一个AscxUtility.cs,这们我们可以在应用程序中多个地方使用. 这样我们就可以重构一下昨晚那个public A