[RT]html控件、html服务器控件和web服务器控件的区别
2009-07-13 下午 12:24
asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等。这里我主要说说html控件

、html服务器控件和web服务器控件的区别。

1、html控件:就是我们通常的说的html语言标记,这些语言标记在已往的静态页面和其他网页里存在,不能在服务器端控制的,只能在客户端通过javascript和vbscript等程序

语言来控制。
如:<input type="button" id="btn" value="button"/>

2、html服务器控件:其实就是html控件的基础上加上runat="server"所构成的控件.它们的注意区别是运行方式不同,html控件运行在客户端,而html服务器控件是运行在服务

器端的。参考其他资料是这样说的: 当ASP.NET 网页执行时,会检查标注有无runat 属性,如果标注没有设定,那么Html标注就会被视为符串,并被送到字符串流等待送到客户端

,客户端的浏览器会对其进行解释;如果Html标注有设定runat="server" 属性,Page 对象会将该控件放入控制器,服务器端的代码就能对其进行控制,等到控制执行完毕后再将

Html服务器控件的执行结果转换成Html标注,然后当成字符串流发送到客户端进行解释。
如: <input id="Button" type="button" value="button" runat="server" />

3、web服务器控件:也称asp.net服务器控件,是Web Form编程的基本元素,也是asp.net所特有的。它会按照client的情况产生一个或者多个html控件,而不是直接描述html元

素。
如: <asp:Button ID="Button2" runat="server" Text="Button"/>
那么它和html服务器控件有什么区别呢?参照其他网页的资料看法如下:
    1)、Asp.net服务器控件提供更加统一的编程接口,如每个Asp.net服务器控件都有Text属性。
    2)、隐藏客户端的不同,这样程序员可以把更多的精力放在业务上,而不用去考虑客户端的浏览器是ie还是firefox,或者是移动设备。
    3)、Asp.net服务器控件可以保存状态到ViewState里,这样页面在从客户端回传到服务器端或者从服务器端下载到客户端的过程中都可以保存。
    4)、事件处理模型不同,Html标注和Html服务器控件的事件处理都是在客户端的页面上,而Asp.net服务器控件则是在服务器上,举例来说:
    <input id="Button4" type="button" value="button" runat="server"/>是Html服务器控件,此时我们点击此按钮,页面不会回传到服务器端,原因是我们没有为其定义鼠标

点击事件。
    <input id="Button4" type="button" value="button" runat="server" onserverclick="test" />我们为Html服务器控件添加了一个onserverclick事件,点击此按钮页面会

发回服务器端,并执行test(object sender, EventArgs e)方法。
    <asp:Button ID="Button2" runat="server" Text="Button" />是Asp.net服务器控件,并且我们没有为其定义click,但是我们点击时,页面也会发回到服务器端。
    由此可见:Html标注和Html服务器控件的事件是由页面来触发的,而Asp.net服务器控件则是由页面把Form发回到服务器端,由服务器来处理。

4、下面我就结合我自己的测试来说明问题:
    这段代码是我放在repeat中的模板里的:其中DeleteCheck是一个js脚本函数,注意是用于是否发送到服务器端的,这里就不展示脚本代码了。
    <input runat="server" type="button" id="delete" value="Server button" />
    <input type="button" οnclick="return DeleteCheck(this)" id="Button1" value="Client button" />
    <input runat="server" type="submit" οnclick="return DeleteCheck(this)" id="Button2" value="Server submit" />
    <input type="submit" οnclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
    <button runat="server" id="button4" οnclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
    <asp:Button runat="server" ID="button5" OnClientClick="return DeleteCheck(this)" Text="Asp:button" />

展现出来的html代码如下:
    <input name="Data$ctl03$delete" type="button" id="Data_ctl03_delete" value="Server button" />
    <input type="button" οnclick="return DeleteCheck(this)" id="Button1" value="Client button" />
    <input name="Data$ctl03$Button2" type="submit" id="Data_ctl03_Button2" οnclick="return DeleteCheck(this)" value="Server submit" / >
    <input ut type="submit" οnclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
    <button id="Data_ctl03_button4" οnclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
    <input type="submit" name="Data$ctl03$button5" value="Asp:button" οnclick="return DeleteCheck(this);" id="Data_ctl03_button5" />
可以看出以下几点:
    1、当控件属性中有runat="server"时,生成的html控件时name和id发生的变化(.net Framework)。
    2、当asp:button服务器按钮通过生成的页面后转化成类型为submit类型的Client控件。
    3、当控件是html控件时通过生成的页面和原来的html代码完全一样(理由上面已经说名)。

另外我还测试了把这段代码直接放到form标记中(不放到其他子标记中)如:
    <input runat="server" type="button" id="delete" value="Server button" onserverclick="delete_ServerClick" />
    <input type="button" οnclick="return DeleteCheck(this)" id="Button1" value="Client button" />
    <input runat="server" type="submit" οnclick="return DeleteCheck(this)" id="Button2" value="Server submit" />
    <input type="submit" οnclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
    <button runat="server" id="button4" οnclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
    <asp:Button runat="server" ID="button5" OnClientClick="return DeleteCheck(this)" Text="Asp:button" OnClick="button5_Click" />
    <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>

直接放到form 标记中生成的html代码
    <script type="text/javascript">
    <!--
        var theForm = document.forms['form1'];
        if (!theForm) {
            theForm = document.form1;
         }
        function __doPostBack(eventTarget, eventArgument) {
        i    f (!theForm.onsubmit    (theForm.onsubmit() != false)) {
                theForm.__EVENTTARGET.value = eventTarget;
                theForm.__EVENTARGUMENT.value = eventArgument;
                theForm.submit();
            }
        }
    // -->
    </script>
    <input language="javascript" οnclick="__doPostBack('delete','')" name="delete" type="button" id="delete" value="Server button" />
    <input type="button" οnclick="return DeleteCheck(this)" id="Button1" value="Client button" />
    <input name="Button2" type="submit" id="Button2" οnclick="return DeleteCheck(this)" value="Server submit" />
    <input type="submit" οnclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
    <button id="button4" οnclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
    <input type="submit" name="button5" value="Asp:button" οnclick="return DeleteCheck(this);" id="button5" />
    <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>

这里有可以看出几点:
     1、当html服务器控件在服务器端添加了服务器事件后生成的代码变为:οnclick="_doPostBack()",实际上是调用脚本把整个窗体提交到服务器(如果没有添件服务器事件而只

是添加了runat="server"是不会发送到服务器端的)。这里注意如果要在html服务器控件中添加一个客户端事件如上面的

<input runat="server" type="button" id="delete" value="Server button" onserverclick="delete_ServerClick" />

变成

<input runat="server" type="button" id="delete" value="Server button" οnclick="return DeleteCheck(this)" onserverclick="delete_ServerClick" />

那样生成的html代码变成

<input language="javascript" οnclick="return DeleteCheck(this) __doPostBack('delete','')" name="delete" type="button" id="delete" value="Server button" />

提示有脚本错误原因是onclick事件执行了2个脚本且书写的格式不正确。οnclick="return DeleteCheck(this);_doPostBack()"这样的话就只能执行第一个函数而第二个函数就不

能执行了(return).如果用 οnclick="return DeleteCheck(this),_doPostback()"是指2个函数同时都要执行没有影响(相当于一条语句)。
2、asp:button中的onclientclick事件生成后就变成了onclick事件了,类型变成了type="submit".然而服务器事件的onclick我想是通过发送到服务器端执行的。

3、LinkButton不定义onclick事件,它会自动的生成下面代码发送到服务器端。 href="javascript:__doPostBack('LinkButton1',' ')"

4、asp:button中的onclientclick事件生成后就变成了onclick事件了,类型变成了type="submit".然而服务器事件的onclick我想是通过发送到服务器端执行的。

html控件、html服务器控件和web服务器控件的区别相关推荐

  1. [转]html控件、html服务器控件和web服务器控件的区别

    asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等.这里我主要说说html控件.html服务 ...

  2. HTML服务器控件与Web服务器控件的区别[转]

    项目 HTML服务器控件 Web服务器控件 是否映射到 HTML标签 与HTML标签存在一一对应的映射关系.runat=server属性把传统的HTML标签转换成服务器控件.这使得开发人员可以将ASP ...

  3. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别

    [考点] ASP.NET中的控件类型理解. [出现频率] ★★★☆☆ [解答] ASP.NET的控件包括WEB服务器控件.WEB用户控件.WEB自定义控件.HTML服务器控件和HTML控件.HTML控 ...

  4. (转) ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站(二)

    Web部件目录 我们已经见过了如何在 WebPartZones 控件中事先放入Web部件.你还可以用另外一种方法完成这个功能,那就是允许用户在运行时添加新的Web部件.通过使用 CatalogZone ...

  5. PAZU 是4Fang 为配合“四方在线”软件于2004年开发的WEB打印控件,适用于各种WEB软件项目的打印。...

    PAZU 是4Fang 为配合"四方在线"软件于2004年开发的WEB打印控件,适用于各种WEB软件项目的打印. PAZU是客户端软件,使用于IE作为客户端的所有应用,与服务器端开 ...

  6. web表格控件FineReport作为企业web表格制作软件的核心优势

    web表格控件FineReport作为企业web表格制作软件的核心优势 报表表格设计器 Excel表格的设计风格 企业在选择报表表格解决方案时,不仅要考虑报表表格工具的功能和服务,还要考虑它是否易学. ...

  7. Asp.net控件开发学习笔记(九)----服务器控件事件

    EventCollection 如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高.EventH ...

  8. 如何显示服务器控件,Panel Web 服务器控件概述

    Panel Web 服务器控件概述 10/22/2014 本文内容 更新:2007 年 11 月 Panel Web 服务器控件在 ASP.NET 网页内提供了一种容器控件,您可以将它用作静态文本和其 ...

  9. java web 打印控件_web打印,web打印控件,dotnet web打印控件,java web打印控件,webprint...

    webprint打印参数设置小插件,主要实现打印纸张,边距,打印机等的设置. 主要功能: 设置页眉页脚属性 设置打印页面左右上下边距 设置打印方向,打印份数,打印指定页 打印模版和指定纸型绑定 设置自 ...

最新文章

  1. AngularJs学习之ng-repeat-start,ng-repeat-end 指令
  2. 从零开发一个 Java Web 项目要点
  3. 马云的移动战略:变革和创新
  4. 信息安全之仿射密码加密和解密
  5. JavaScript实现k-nearest算法(附完整源码)
  6. nginx同时支持asp.net与php
  7. .net core实践系列之短信服务-架构优化
  8. [html] 写html代码时,怎样才加速写代码的速度呢?你有什么方法?
  9. 石头剪刀布程序流程图_“剪刀、石头、布”也能救命?临安区社会福利中心开展海姆立克急救法培训...
  10. 数论 + 公式 - HDU 4335 What is N?
  11. 洛谷 P1724 东风谷早苗
  12. java基础系列十七(时间日期转换)
  13. POJ 3264 Balanced Lineup
  14. matlab读int16读文件_matlab读文件
  15. 多元线性回归分析练习题
  16. 自制Unity 色相环调色板
  17. 【网络与系统安全实验】网络监听及防御技术
  18. 使用express+webpack搭建一个小项目
  19. MXC_UART 内核调用过程
  20. Android4.0新的SDK新特性 (转)

热门文章

  1. spring+servlet+mysql架构的网页用javascript前端,java后端,带登录以及动态验证码界面
  2. 奇葩说今晚聊前任|扒一扒你的前任企业邮箱
  3. fetchall php,PDOStatement::fetchAll
  4. 信必优再次收到泛亚地区Top级独立上市人寿保险集团感谢信
  5. 中英文说明书丨艾美捷BrdU细胞增殖检测试剂盒
  6. 加密数字货币的 7 个致命悖论
  7. 数据采集中间件技术对比V1.0
  8. 怎么有效地进行问卷发放?
  9. C语言游戏开发丨源代码丨开发教程
  10. android实现选择题功能,安卓系统的一些选择题