频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

为WebForms说几句话和一些ASP.NET开发上的经验(2)(1)

作者: 赵劼 出处:博客园 2008-04-08 14:21    砖    好    评论   进入论坛
阅读提示:开发人员被“宠坏”了,上一篇文章中有位朋友说这就是“穷人的孩子早当家”,还是有一定道理的。在.NET环境下我们就像是官宦子弟,不过这并不能成为我们习惯于“吃喝嫖赌”的理由。我们要合理利用富裕的环境带给我们的资源,但是要适当地抛弃一些不好的东西。

正如上一篇文章开始所说的,我不会对MVC框架有任何“贬低”,任何技术滥用都有问题,所以任何东西都会有所谓的Best Practice(去MSDN的Patterns & Practice栏目看看就知道了)。我写这几篇文章,是想说明,很多WebForms的缺点是被夸大了。WebForms的确有缺点,但是我们完全可以避开,并且仅仅利用到WebForms给我们带来的便利。这其实也是一种Best Practice。相信以后MVC框架也一定会出现这样的东西。

在上一篇的评论中,有朋友说我是“边缘”的ASP.NET程序员,大概是因为我用WebForms但是抛弃ViewState、PostBack和GridView这种“重要”的东西吧!我不知道这样是不是“边缘”,但是我的确抛弃了不少东西。例如还有ADO.NET中的DataSet/DataTable——但是我们还有DataReader呢!抛弃了微软提供的一部分东西,我们其实可以发现,.NET里的基础组件一个都不少,用起来也会得心应手。

去其糟粕,取其精华。

三、生成丑陋的HTML,难以进行样式控制

在ASP.NET的WebForms刚出现时,各种“演示”看上去真的很美。这个特点微软至今还保留着,各微软技术大会上的演示真的让人感到心潮澎湃。在我看来,那些“激素大会”更是一种推广策略,而并没有将目光集中在技术细节的本身。所以微软的东西似乎总是有入门容易提高难的“毛病”。开发人员被“宠坏”了,上一篇文章中有位朋友说这就是“穷人的孩子早当家”,还是有一定道理的。在.NET环境下我们就像是官宦子弟,不过这并不能成为我们习惯于“吃喝嫖赌”的理由。我们要合理利用富裕的环境带给我们的资源,但是要适当地抛弃一些不好的东西。

好像说了几句废话,现在进入正题。说到WebForms则不得不提丰富的控件,基于ASP.NET平台的第三方控件提供商似乎比其他平台下的总合还要多,这也是产业啊!在微软提供的控件里,GridView(或者1.1里的DataGrid)是被“演示”次数最多的,也似乎是最强大(还是差不多等同于“复杂”)的。有了GridView之后,很多开发人员就习惯于朝页面上拖个控件,然后,再设计器里点点鼠标,设设样式,最后绑定一个DataTable上去。哗,好一个表格就此诞生。然后我们还可以响应其事件,对某一行数据进行编辑,删除。太轻松了,这世界一下子变得美好了起来。不过由于GridView过于“强大”,它几乎成为了ASP.NET初学人员的必修课,当对于Web开发都不明就里的初学者都习惯于GridView、GridView、GridView时,它的滥用也就不可避免了。于是乎,做表格,用GirdView,做列表,也用GirdView(不就是个只有一列的表格嘛!)。

可惜的是,GridView有很多毛病。如果要使用GridView的高级功能(添加、修改、删除等等),ViewState必不可少,再加上很多开发人员在绑定数据时没有经过筛选,导致ViewState变得无比庞大(例如显示一个文章列表,明明只需要ID、标题,创建时间等基本信息,却用一个“令人无比愉悦”的SELECT * FROM Article语句把文章内容也选择了出来并绑定在GridView上,ViewState中也就不得不包含几千几万字的多余数据)。

不过现在想说的,倒是它生成出的HTML。

GridView在客户端生成的HTML是个<table />,可惜这个<table />里东西太多了,的确显得很丑陋。不过更关键的在于,这个表格的样式实在难以控制。虽说GridView里从标题到单元格到低部都能够进行样式的定义,但是灵活度还是远远不够。再加上GridView生成的HTML死板而不符合Web标准(例如不会生成<th />标签,用ControlAdaptor进行改造的做法不算),但是优秀的样式开发人员大都是坚定的Web标准支持或推广者,ASP.NET对于标准支持不佳,难以控制样式的说法满天飞扬。

我想为WebForms喊冤。不过首先我会打倒以GridView为首的复杂控件(包扩DataList、FormView等等)并狠狠踩上几脚。有人说,当抛弃了GridView之后,用WebForms还有什么意义?其实类似的话也不断在我说要抛弃ViewState和(复杂)的PostBack时出现。如果您觉得抛弃了这些东西WebForms就失去意义的话,那么我想说,ViewState、PostBack、GridView远不是WebForms的全部。我认为,Control模型(或者说组件化模型)才是WebForms的关键。而这个模型的“基础”是绝对优秀的。下面我会进行一些展示,虽然这些展示我觉得是基础中的基础。

首先我们先来看一下最常用的用户控件的表现吧(DemoControl.ascx):

<%@ Control Language="C#" AutoEventWireup="true" %>
<%= "Hello World!" %>

然后,将它放在页面里:

<div> 
<uc1:DemoControl ID="DemoControl1" runat="server" />
</div>

在浏览器里打开页面会发现如下的代码:

<div> 
Hello World!
</div>

多干净的代码,我甚至连多余的空格都没有去除。还有一个例子就是Master Page,<asp:ContentPlaceHolder />也不会产生任何多余的代码。这说明了使用用户控件搭出的WebForms页面,是不会出现多余的“脏”代码的。如果您在观察那些基础控件,TextBox,CheckBox(不设Text属性),Panel等等,亦或是加上runat=server的HTML元素,无一例外(当然客户端ID的确还是比较长,关于这个问题我会在以后的文章进行讨论)。

那么肮脏的Tag是哪里来的呢?当然是以GridView为首的复杂控件。那么如果我们要生成批量数据,又该怎么办呢?现在来看看Repeater的表现吧,就以最常见的无序列表为例:

<asp:Repeater runat="server" ID="rptItems">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<img src="<%# Eval("ImagePath")) %>" alt="<%# Eval("Title") %>" />
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>

还是在浏览器里察看HTML(我这里就不贴出来了),一行多余的代码也没有。


共2页: 1 [2] 下一页
【内容导航】
专题
ASP.NET 2.0基础开发指南
微软的Ajax:Atlas(ASP.net AJAX)
ASP.NET开发教程
初探敏捷开发
WCF开发基础
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看73353次)
·UML类图详解 (查看65580次)
·UML统一建模语言 (查看35746次)
·C#技术开发指南 (查看34854次)
·C++是垃圾语言?! (查看33785次)
·Java编程开发手册 (1196个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (309个砖)
·.NET开发手册 (241个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (654个好)
·Java基础教程 (574个好)
·.NET开发手册 (274个好)
·PB开发教程 (212个好)
·Delphi开发技术手册 (194个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
PHP开发应用手册
PHP开发应用手册
国际文档格式标准开战
国际文档格式标准..
微软出价446亿美元收购雅虎
微软出价446亿美..
· 微软出价446亿美元收购..
· 技术人求职简历完备手册
· 北漂技术人90天求职纪实
· 勇闯IT培训黑色围城
· 隐私保护技术探讨
· Windows Server 2008专..
· ASP.NET 2.0基础开发指..
· WCF开发基础
· 路由器设置与口令恢复
· 华为员工自杀频频拷问..
· VC++基础开发专题
· NAC安全访问控制
· 2008年春季英特尔信息..
· Visual Studio 2005开..
· Linux——从菜鸟到高手
· 如何优化IT 控制能耗
清除流氓软件——51CTO特别专题
清除流氓软件——..
ARP攻击防范与解决方案
ARP攻击防范与解..
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 中间件应用技术专题
· SQL Server入门到精通
· 病毒查杀专题
· 国际文档格式标准开战
· Linux防火墙
· 路由器设置与口令恢复
· 打造安全服务器
· SOA 面向服务架构
· PHP开发应用手册
· ADSL应用面面俱到
ARP攻击防范与解决方案
ARP攻击防范与解..
SQL Server 2008/2005全解
SQL Server 2008/..
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· 中间件应用技术专题
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 身份认证技术
· 病毒查杀专题
· 清除流氓软件——51CTO..
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用