.net控件本质

在我的一个项目中需要对于控件进行区分总结,我在网上找了找加上自己的实际测试总结如下:(如果有什么不正确的请即使指出,一起讨论,大家共同进步)
        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"/&gt;是Html服务器控件,此时我们点击此按钮,页面不会回传到服务器端,原因是我们没有为其定义鼠标点击事件。
        <input id="Button4" type="button" value="button" runat="server" onserverclick="test" /&gt;我们为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" onclick="return DeleteCheck(this)" id="Button1" value="Client button" />
  <input runat="server" type="submit" onclick="return DeleteCheck(this)" id="Button2" value="Server submit" />
  <input type="submit" onclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
  <button runat="server" id="button4" onclick="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" onclick="return DeleteCheck(this)" id="Button1" value="Client button" />
 <input name="Data$ctl03$Button2" type="submit" id="Data_ctl03_Button2" onclick="return DeleteCheck(this)" value="Server submit" / > 
  <input ut type="submit" onclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
  <button id="Data_ctl03_button4" onclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
  <input type="submit" name="Data$ctl03$button5" value="Asp:button" onclick="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" onclick="return DeleteCheck(this)" id="Button1" value="Client button" />
 <input runat="server" type="submit" onclick="return DeleteCheck(this)" id="Button2" value="Server submit" />
 <input type="submit" onclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
 <button runat="server" id="button4" onclick="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) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script>
   <input language="javascript" onclick="__doPostBack('delete','')" name="delete" type="button" id="delete" value="Server button" />
    <input type="button" onclick="return DeleteCheck(this)" id="Button1" value="Client button" />
    <input name="Button2" type="submit" id="Button2" onclick="return DeleteCheck(this)" value="Server submit" />
    <input type="submit" onclick="return DeleteCheck(this)" id="Button3" value="Client submit" />
     <button id="button4" onclick="return DeleteCheck(this)" value="Button-Button">Button-Button</button>
     <input type="submit" name="button5" value="Asp:button" onclick="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" onclick="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。控件的名字没有发生变化,这个问题我也不太明白为什么不发生变化,请高手门指教哈
3。asp:button中的onclientclick事件生成后就变成了onclick事件了,类型变成了type="submit".然而服务器事件的onclick我想是通过发送到服务器端执行的(具体我也不太很清楚)。
4。LinkButton不定义onclick事件,它会自动的生成下面代码发送到服务器端。

href="javascript:__doPostBack('LinkButton1',' ')"  

以上是我对asp.net控件进行了简单的介绍。这只是我个人的观点总结,有什么不正确的希望朋友能够提出来,我们大家共同讨论,共同进步。

付出最大努力,追求最高成就。

asp.net控件本质相关推荐

  1. 一起谈.NET技术,asp.net控件开发基础(18)

    本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...

  2. asp.net控件页面交互_ASP.NET Web窗体用户控件的基本交互

    asp.net控件页面交互 I saw a recent question regarding .NET - Render User Control Logo on Postback and deci ...

  3. 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图

    Nikhil Kothari Microsoft Corporation 2000年8月 简介 Microsoft® Visual Studio.NET 的下一发行版包括 DataGrid Web 控 ...

  4. ASP:Literal控件用法

    ASP:Literal控件用法 刚开始学.NET的朋友可能不清楚Literal和Label到底有什么区别,其实它们也只有一个区别,就是在转换成客户端Html代码后,Label就成了<span&g ...

  5. 一起谈.NET技术,asp.net控件开发基础(20)

    上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...

  6. Silverlight 3.0 不再包含 asp:silverlight 控件

    从 Silverlight 2 升级到 Silverlight 3 可能会报如下错误,程序中可能引用了 asp:silverlight 控件: Could not load file or assem ...

  7. Asp.net控件之异同:HTML控件与Web服务器控件

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

  8. asp.net控件库FineUI使用入门图解

    FineUI是一个基于 jQuery / ExtJS 的 ASP.NET 控件库,其宣传语是: 创建 No JavaScript,No CSS,No UpdatePanel,No ViewState, ...

  9. 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

最新文章

  1. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(4)...
  2. windows系统numpy的下载与安装教程
  3. Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别
  4. Confluence 6 在 Apache 或者系统级别阻止垃圾
  5. Python @property装饰器的用法,判断函数参数整形、字符串、取值范围
  6. css+div排版如何支持所有浏览器
  7. 全国python一级考试_全国青少年软件编程(python)等级考试试卷(一级)
  8. 计算机视觉基础:图像处理Task01-图像插值算法
  9. 基础选择器之id选择器(CSS、HTML)
  10. ArcGIS Maritime Server 开发教程(二)ArcGIS 海图软件系列
  11. nodejs API(二)
  12. pycharm 修改新建文件时的头部模板(默认为__author__='...')
  13. ironpython调用c dll_在IronPython中加载模块
  14. geoserver三维_基于geoserver的伪三维地图制作
  15. html首字母大写,CSS实现英文单词的首字母大写
  16. GIS软件——arcgis10.2制作符号并链接符号库
  17. linux虚拟机界面菜单栏和任务栏不见了,已解决
  18. 市场营销学9——产品策略
  19. 强化学习七日打卡营终极复现之flappy bird
  20. oracle gi和gc的区别,gl值(gi值跟gl值有什么区别)

热门文章

  1. 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 )
  2. 【数字信号处理】相关函数应用 ( 正弦信号 的 自相关函数 分析 | 在白噪声中检测正弦信号 )
  3. 【计算机网络】网络层 : 网络层设备 ( 路由器 | 输入端口处理 | 输出端口处理 | 物理层、数据链路层、网络层 设备对比 | 路由表 与 路由转发 )
  4. 【Android 应用开发】Android - 按钮组件详解
  5. Codeforces 1215
  6. 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第5节 final关键字_1_final关键字概念与四种用法...
  7. Flask框架 之abort、自定义错误、视图函数返回值与jsonify
  8. 数据性能调校——查看最耗资源的各种SQL
  9. 前后端数据交互的几个方法
  10. bzoj 2809 Apio2012 dispatching