转载:Asp.Net之Html控件与Web控件的区别及如何正确使用它们.

讨论内容:  Asp.Net之Html控件与Web控件的区别及如何正确使用它们.

DOT.NET中常用的WEB表示层控件分为[HTML控件]和[WEB服务端控件],位于System.WEB.UI.Htmlcontrols和System.WEB.UI.Webcontrols;

[HTML控件]和[WEB服务端控件]的区别,对于WEB 开发所解决的问题是在WEB(Http)的模式下面,接受用户的交互,生成给客户端的HTML字符流.但是对于[HTML控件]和[WEB服务端控

件]在服务器端来说,就有了不同的实现方式,[HTML控件]相当于普通的HTML元素, 服务器在编译解释的时候,也没有做任何的处理.

[HTML控件]可以通过加<runat="server">标记,将其转换为服务端的控件,来实现服务器端在后台程序中访问,实现部分和WEB服务端控件相同的功能.

[WEB服务端控件]则是很强大的,能参与服务器端编程成的控件,它的属性很多,能够在WEB页面被请求的时候被访问到,在服务器内存中存在具体的变量实例.缺点是占用系统资源;

有没有runat= "server "  是判断能不能被服务器端访问的标志;一个服务端控件在建立的时候就有,HTML控件只有在被转换为服务端控件后才增加了这样的标志,并有了一个ID(但

是不能使用事件编程_在服务端);所以根据系统需求动态的调整页面的可视控件.何时采用HTML控件,何时采用WEB服务端控件,将方便和性能统一起来,这个是很重要的;

一些强大的[WEB服务器端控件]则是只能通过服务端来实现,并且结合,NET后台强大的类库,实现完美的数据操作功能.

-----------------------------------------------------------------------------------
htmlcontrol也是服务器控件,它也是继承自System.Web.UI.Control的,与WebControl的一样。html控件与web控件都是服务器控件。实际上,用户控件也是服务器控件。

总的来说,htmlcontrol比功能类似的wecontrol都要简单。不过,html仍然参与页面对服务器控件的生命周期控制的全过程,例如它仍然是有ViewState,会触发服务器端的事件代

码等。如果说web控件相对于没有runat=server的html对象而言,对系统资源的消耗是100:1,那么html控件对客户端没有runat=server的html对象的比是80:1。其实,就是其他服

务器控件与literalcontrol服务器控件之比。

实际上,普通的html对象如果不写上runat=server,那么多个这样的对象会打包到一个literalControl控件中。因此即使没有runat=server你也可以在服务器端动态访问和改变他

们的内容,只不过要自己取出相应的literalControl的Text属性,然后修改它(用正则表达式分解出待修改的html对象),就能操纵输出结果。

但是如果写上了runat=server,那么每一个html对象会被重新解析为所对应的特殊html控件,或者htmlGenericControl。这就更能在服务端操纵它。并且这与literalcontrol不同

,一个html控件对应一个html对象,不需用正则表达式解析。例如,你想用程序改变页面的标题,有希望程序代码比较OOP化的整齐易读,不喜欢绑定表达式等形式,就可以这样:
<head>
  <title  id=pageTitle  runat="server"  />

然后在代码中声明pageTitle变量,并用  pageTitle.InnerText  赋值。由于htmlGenericControl继承自htmlContainerControl,所以它甚至有InnerHTML属性。
一些工作,不需要webcontrol那么多功能的时候,使用htmlControl来完成更方便于将来改进,并且有时似乎(对于比较精通html的人来说)更方便。

到底用什么控件,并没有一定之规。有界面的不仅仅是webControl。没有界面的,也可能是服务器控件。例如写一个网页定时器控件,就从control继承就足够了。

在asp.net中,page也是从control继承来的。按照msdn上的说法,所有从control继承的都算做服务器控件。所以很多比较高级(但是可能抽象)书上也会说“Page和ascx也是一种

控件”。

了解控件,最根本地是动手去做,最好做一些高级的应用程序大量复用的控件(例如把这个回帖页面做到单个控件里,当然要支持编辑帖子功能,其针对的数据库和帖子的表是可

以灵活指定的,这样可以用到多个不同风格的项目中),否则会被它的各种变化迷惑住。

------------------------------------------------------------------------------------
Web 服务器控件
Web 服务器控件是设计侧重点不同的另一组控件。它们并不一对一映射到 HTML 服务器控件,而是定义为抽象控件,控件在其中呈现的实际HTML,与编程针对的模型可能大相径庭。

例如,RadioButtonList  Web服务器控件可在表中呈现,也可呈现为其他HTML的文本。

Web 服务器控件包括传统的窗体控件,例如按钮、文本框和表,等复杂控件。它们还包括提供在网格中显示数据、选择日期等常用窗体功能的控件。

除了提供 HTML 服务器控件的上述所有功能(不包括一对一映射到 HTML 元素)外,Web 服务器控件还提供以下功能:

*功能丰富的对象模型,该模型具有类型安全编程功能。
*自动浏览器检测。控件可以检测浏览器的功能,并为基本型和丰富型(HTML 4.0) 浏览器创建适当的输出。
*对于某些控件,可以使用模板来自定义控件的外观。
*对于某些控件,可以指定控件的事件是立即发送到服务器,还是先缓存然后在提交窗体时引发。
*可将事件从嵌套控件(例如表中的按钮)传递到容器控件。
*在设计时的“HTML”视图中,显示在页中的控件的格式如下:
<asp:button  attributes  runat= "server "/> ;本例中的属性不是 HTML 元素的属性。相反,它们是 Web 控件的属性。

运行 Web 窗体页时,Web 服务器控件使用适当的 HTML 呈现在页上,这通常不只取决于浏览器类型,还与对控件进行的设置有关。例如,TextBox 控件可能呈现为一个 <INPUT>标

记,也可能是<TEXTAREA>标记,具体取决于其属性。

------------------------------------------------------------------------------------
HTML 服务器控件
HTML 服务器控件是 HTML 元素,这些元素包含使其自身在服务器上可见并可编程的属性。默认情况下,服务器无法使用Web窗体页上的HTML元素;这些元素被视为传递给浏览器的不透明文本。但是,通过将HTML元素转换为HTML服务器控件,可将其公开为可在服务器上编程的元素。

HTML 服务器控件的对象模型紧密映射到相应元素的对象模型。例如,HTML 属性在 HTML 服务器控件中作为属性公开。

页上的任意 HTML 元素都可以转换为 HTML 服务器控件。转换是一个只涉及几个属性的简单过程。作为最低要求,通过添加 RUNAT= "SERVER " 属性,HTML元素即可转换为控件。这将在分析期间提醒 ASP.NET 页框架,它应该创建该控件实例,以便在服务器端页处理期间使用。如果要在代码中作为成员引用该控件,则还应当为控件分配 ID 属性。

页框架为页中最常动态使用的HTML元素,提供预定义的HTML服务器控件:窗体、HTML  <INPUT>  元素(文本框、复选框、“提交”按钮等)、列表框(<SELECT>)、表、图像等等。这些预定义的 HTML 服务器控件具有一般控件的基本属性,此外每个控件通常提供自己的属性集和自己的事件。

HTML 服务器控件提供以下功能:

*可在服务器上使用熟悉的面向对象技术对其进行编程的对象模型。每个服务器控件都公开一些属性,这些属性使您得以在服务器代码中通过编程操作该控件的HTML属性。
*提供一组事件,您可以为其编写事件处理程序,方法与在基于客户端的窗体中大致相同,所不同的是事件处理是在服务器代码中完成的。
*在客户端脚本中处理事件的能力。
*自动维护控件状态。在窗体到服务器往返期间,用户在HTML服务器控件中输入的值将在页发送回浏览器时自动维护。
*与验证控件进行交互,便于您验证用户是否在控件输入了适当的信息。
*数据绑定到一个或多个控件属性。
*如果Web窗体页显示在支持层叠样式表的浏览器中,则支持HTML4.0样式。
*直接可用的自定义属性。您可以将任何需要的属性添加到HTML服务器控件,页框架将读取并呈现它们而不更改其任何功能。这将允许您向控件添加浏览器特定的属性。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值