当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net下web控件点评

ASP.NET
不同映射模式下的直线输出的效果问题
ASP.NET开发下的MVC设计模式的实现
ASP.NET编写应用程序的十大技巧
ASP.NET中使用AJAX的简单方法
ASP.NET MVC实现自己的视图引擎
认识asp.net会话状态
ASP.NET实现页面传值的几种方法
.NET中容易混淆的几组重要概念
详解.NET中的动态编译技术
如何使用ASP.Net加密Cookie
ASP.NET 2.0跨网页提交的三种方法
ASP.NET 2.0创建母版页引来的麻烦
.Net整合其他平台的一些探讨
ASP.NET编程经验技巧10则
最佳实践 ADO.NET实用经验无保留曝光
在.NET上执行多线程操作要考虑的两大因素
.Net开发 细说Visual Basic.Net
ASP.NET网络编程中经常用到的27个函数集
ASP.NET防止用户多次登录的方法
对ASP.NET MVC项目中的视图做单元测试

ASP.NET 中的 asp.net下web控件点评


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 51 ::
收藏到网摘: n/a

asp.net下控件分二大类,分别在

System.Web.UI.WebControls

System.Web.UI.HtmlControls

命名空间下,前者继承自WebControl,后者继承自HtmlControl,这二个类又都继承自System.Web.UI.Control
额, windows平台,不论你从事什么开发,最终都需要有人调用loadlibrary.dll.
那么asp.net控件,不论你使用什么控件,最终都要调用Render.

 其实做为前台开发,这些控件大部分不是那么好用.

1.首先会生成长长长长的ID,特别是面页镶套有控件的时候,一是会让你最终的HTML代码
膨胀,另外和js配合的时候死了麻烦,要和js交互需要写一堆 <%=Control.ClientID %>,没办法,asp.net非要'善意'的帮助我们解决ID冲突
的问题.这个ID为什么不和最终生成的ID分开呢,可能是当时做这套控件的时候javascript还没有现在这么强大,被ms忽略了.

2.还有多生成一个span的问题,即不w3c,又不利于排版.写css的时候要考虑夹在中间不尴不尬的span.

3.form问题,很多表单等控件,要用到server端form,当而面有多个form的时候,只能把其中的一些form用js交互了,form在URL重写的时候
还有个问题,生成的不是URL重定向后路径,server端处理这又需要重写form

4.对于新手还有长长的_VIEWSTATE

很多时候,我们编写前台代码的时候,只是需要简单的呈现出来,不需要长长的ID,不需要span,不需要_VIEWSTATE,仅仅需要几行干净的
HTML标签,但是根本没有选项或属性设置,要么全部给你,要么全不给 .虽然我们可以像asp,和asp.net那样来编写代码,但是既然提供了
总是要用的.

 WebControl也带来一定的灵活性,现在asp.net web开发,基本都分是N层架构, 如果这些代码都在逻辑层输出,
不修改源代码就没办法更改了,<asp:HyperLink runat="server" ID="link">连接文字</asp:HyperLink> 比如这样的,简单的个改连接文字
模板等属性.另外,表格控件用在后台编辑数据等也是相当方便. 但是用在前台,GridView之类的设计成美工切好的图,绝对的体力活.
有些人使用控件都快有强迫症了,前台简单的显示都要用GridView,明明StringBuilder拼凑又简洁,又高效么.

前几天碰到一个奇怪的问题,想做一个效果, 鼠标移动到图片上,高亮显示边框,美工做好加入到代码中,死活没效果,找半天不知道怎么回

事,后来无意中发现所有的Image控件,自动加上了style="border-width:0px;", 好吧,后处台处 Image.Attributes.Remove("style");
还是有style="border-width:0px;"在加上Image.Attributes.Clear();仍然有style="border-width:0px;",决对是个脑残的设计,大概是为了

解决夹在a标记中的img标记默认的1px的border的问题吧,可是这就没办法用css来处理Image的border属性了.


我最常用的控件:

literal 干净,方便.拼凑HTML代码,js代码

repeater 干净的列表

placeholder 控制显示逻辑

最脑残的控件:

Image 原因见上面一条

最没价值的控件:

label  span套literal就行了,样式交给美工去解决,看不出有什么实用的价值.

难用的控件:

datalist ,gridview 生成div或列表布局好累(仅仅指前台)

其他控件视场合而定.

另外HtmlControl和WebControl的区别,网上有这样说的,纯属误导,实在看不下去了,解释一下
--------------------------------
1. 使用起来也相当方便,举个简单的例子,例如Button的生成:
Html控件是将庞大控件集合全部弄到页面中,用到哪个功能,就设置一下属性,如下:
<input type=submit/button/text runat=server>  
这样会占用相当大的控件资源
--------------------------------
这个纯属误导,还流传很广. 最终都是生成HTML标签,input之类的跟本不需要将庞大控件集合合部弄到页面中,只是最终生成一个标签而已,要说差异,也只是HtmlControl和WebControl基类之间的差异.

--------------------------------
2.Web控件具有回送功能,能够用ViewState维持控件的状态.
  Html控件则不能,当点击页面的操作,其状态就会丢失.
--------------------------------
protected virtual void LoadViewState(object savedState);
protected virtual object SaveViewState()
其实这二个定义在System.Web.UI.Control基类中,只是WebControl重写了这二个方法,但HtmlControl里没有对这二个方法进行重写,但这不等于上面的说法

--------------------------------
3. Html控件与Web控件最大的区别是它们对事件处理的方法不同。对于Html窗体控件,
当引发一个事件时,浏览器会处理它。但对于Web控件,事件仅由浏览器生成,但浏览
器不会处理它,客户端要给服务器发个信息,告诉服务器处理事件。
--------------------------------
这是混淆了server事件和客户端脚本事件,不论是实现自WebControl还是HtmlControl都可以触发Server端事件 
处理server端事件只要实现了IPostBackEventHandler接口的控件,都可以 .