博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML服务器控件与Web服务器控件
阅读量:6240 次
发布时间:2019-06-22

本文共 2788 字,大约阅读时间需要 9 分钟。

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

html控件

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

 

 

html服务器控件

其实就是html控件的基础上加上runat="server"所构成的控件。它们的主要区别是运行方式不同,html控件运行在客户端,而html服务器控件是运行在服务器端的。 当ASP.NET网页执行时,会检查标签有无runat属性,如果标签没有设定,那么Html标签就会被视为字符串,并被送到字符串流等待送到客户端,客户端的浏览器会对其进行解释;如果Html标签有设定runat="server" 属性,Page对象会将该控件放入控制器,服务器端的代码就能对其进行控制,等到控制执行完毕后再将Html服务器控件的执行结果转换成Html标签,然后当成字符串流发送到客户端进行解释 。不能通过js来控制它。

 

 

web服务器控件

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

那么它和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发回到服务器端,由服务器来处理

 

测试说明问题

    这段代码是我放在repeat中的模板里的:其中DeleteCheck是一个js脚本函数,是用于是否发送到服务器端的,这里就不展示脚本代码:

 

 

展现出来的html代码如下:

 

 

 

可以看出以下几点:
1、当控件属性中有runat="server"时,生成的html控件时name和id发生的变化。
2、当asp:button服务器按钮通过生成的页面后转化成类型为submit类型的Client控件。
3、当控件是html控件时通过生成的页面和原来的html代码完全一样(理由上面已经说明)。

另外:我还测试了把这段代码直接放到form标记中(不放到其他子标记中)如:

 

 

LinkButton

生成的html代码:

 

 

LinkButton

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

 

这里注意如果要在html服务器控件中添加一个客户端事件如上面的: 
<input runat="server" type="button" id="delete" value="Serverbutton"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个函数同时都要执行没有影响(相当于一条语句)。

 

使用场景 

如果某些控件不需要服务器端的事件或状态管理功能时,可以选择HTML控件,这样可以提高应用程序的性能;

 

如果需要对控件进行动态的处理,或要保存其状态等可以选择WEB服务器控件!

WEB服务器控件用起来个人认为要方便,但考虑性能的话在能不用WEB服务器控件的地方就尽量不用 

 

转载于:https://www.cnblogs.com/peterYong/p/6556568.html

你可能感兴趣的文章
Boost库学习(2)thread 1
查看>>
我的友情链接
查看>>
年前年后的苦闷
查看>>
用Python获取腾迅财经HTTP信息股票数据的方法
查看>>
两分钟彻底让你明白Android Activity生命周期(图文)!
查看>>
Oracle数据库的体系结构
查看>>
ios 快捷键使用
查看>>
马哥笔记第六天bash增强赋值、if、文件测试、字符测试、整型测试、交互式编程...
查看>>
安卓网络状态的获取代码
查看>>
理解:思科设备上的网络地址翻译功能(NAT)功能
查看>>
我的友情链接
查看>>
java代码中获取classpath路径
查看>>
与或非运算,逻辑运算,布尔运算
查看>>
我的友情链接
查看>>
鏃ョ収鍔ㄦ极鍩哄湴
查看>>
sqlserver2008 此数据库没有有效所有者错误的解决方法
查看>>
Node.Js笔记
查看>>
Fragment之间的参数的传递
查看>>
网上搜罗整理关于c_str(),mark一下下
查看>>
Windows服务器配置与管理------ 本地用户、组的管理
查看>>