维生素C.net
Talents come from diligence, and knowledge is gained by accumulation 天才源于勤奋,知识源于积累。
难忘的1654天
博客园  首页  新随笔  新文章  联系  管理  订阅 订阅
随笔- 220  文章- 1  评论- 1645 
关于控件部分的看法--读Programming ASP.NET中文版

读书一般先看目录,并且习惯性的从第三章开始看,除了胡百敬老师的书和代码大全外,其他见过的中文技术书籍无论是自己撰写的还是翻译的都清一色的在前两章添加N多基础知识,不管讲的好不好,第一次看一本书从第三章开始看都成了习惯。

同其他讲解asp.net的书一样,第三章是从控件开始讲起的,但是读罢此章,作者描述问题的思路和译者的翻译确实让我迷惑了很多,继续看完后面的章节,感觉作者刚下笔实在是太紧张,而且太想把asp.net介绍给一个从来没有接触过web开发的朋友了。

我们从另一个角度还看asp.net中的几种控件:asp.net server control, html server control, html control。

asp.net server control是最基础的asp.net组件,本书也使用了6章来介绍了常用的控件、2.0的新控件和控件开发的知识。而html的两种control和asp.net server control之间的关系如何理解呢?最简单的就是站在一个最高的角度来看——看它们最终在呈现到客户端浏览器的时候是什么。我们用下面这个很简单场景来看一下:

假设我们要用户输入用户名,点击提交按钮后服务器根据用户名从服务器获得用户的年龄然后显示在页面上。我们拖放上一个Textbox和一个Button,再放置并配置好一个验证控件就ok了。当我们使用验证控件的时候,asp.net会将起使用span标记和一堆控制样式的属性将*呈现到页面上,而运行机制是用脚本控制的,这些脚本会自动根据用户的浏览器将适合该浏览器的代码一起发送到客户端上。

这时候我们运行这个页面,看其source code,很容易看出asp.net server button control就是一个type为submit的html input control。这时候我们再放置一个html control的button控件,然后将其属性加上runat="server",再运行,然后看源代码,就可以看到他被render成一个type为button的html input control了。这时候点击两个控件中的任何一个都会造成页面提交(如果验证控件验证通过的话),作为submit的asp.net server control很容易理解为什么被会引发提交,那么html server control呢?是因为它调用的脚本里有__doPostBack('Button2',''),而页面里的__doPostBack()函数使得页面提交了。而加入了验证控件后,两者再提交前都是需要做数据检查的,使用的都是脚本来验证是否可以提交页面数据,但是方式是截然不同的:

<input type="submit" name="Button1" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;Button1&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="Button1" />

<input language="javascript" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(''); __doPostBack('Button2','')" name="Button2" type="button" id="Button2" value="button" />

<span id="RequiredFieldValidator1" style="color:Red;visibility:hidden;">Please enter your username</span>

这时我们可以看到嵌入资源文件的脚本这样被使用了,但是如果想知道这些方法具体做了些什么可以借助fiddler、httpwatch或firebug这样的工具来看,不过最快捷的办法是在浏览器的地址栏敲入javascript:js_method_name来查看。比如javascript:WebForm_DoPostBackWithOptions就能看到该方法的内容了。

好,我们刚才从结果上入手,算是比较深入的看到了结果和客户端页面执行的过程,这时我们不妨再跳出来,重新审视一下这个过程:我们需要的是用户输入其username,然后我们根据该值从数据库里取出对应的年龄并显示在页面上,那么整个过程应该是用户数据姓名提交,服务器得到用户名,然后将年龄得到,返回给客户端。抛开http的信息来回传递的信息应该只有username和age,但是看看我们现在,是否传送了太多无用的数据?

那我们简化一下流程:我们全部使用html control来做,分别放置一个type为button和text的input控件,当button被点击时执行一个javascript function检验text里是否有字符然后将其发送到服务器,比如通过调用服务器段的一个web service,这个web服务在验证数据后将数据从database中取出,返回到客户端,在接受到数据后脚本将其呈现在页面上。

需要注意的是数据在客户端的验证是不可信的,通常情况下大多数浏览器通过地址栏就可以任意修改页面元素的值,所以在服务器做判断是必须要的。

这时候我们看两个过程简直是天壤之别,但是在开发效率和后期维护上也是天壤之别的。asp.net server control如果用不好,造成的后果就是灾难了。

看完此章的朋友们再看完了这篇抛的“砖”,然后将一个<asp:Button..../>中的runat="server"去掉,看看是什么结果?思考一下html被浏览器的解释是否能更清晰的认识到Control这个词呢?

posted on 2007-03-12 04:33 维生素C.NET 阅读(1737) 评论(7)  编辑 收藏 所属分类: Reading

发表评论
  回复  引用    
2007-03-12 15:14 | ACHRI [未注册用户]
精彩啊!

感谢维C
  回复  引用    
2007-03-13 14:10 | pgmfan [未注册用户]
相当不错,非常值得一读
  回复  引用  查看    
2007-03-15 12:27 | yunhuasheng      
very good!!!
  回复  引用    
2007-03-22 14:02 | abcdedfg [未注册用户]
jojoijiojoijoijoijoijoijijoj
  回复  引用    
2007-03-30 10:20 | jone [未注册用户]
刚买了这本书期待您的继续讲解,谢谢
  回复  引用    
2007-04-04 21:44 | 三人行 [未注册用户]
老师继续抛析一下 这些东西啊
  回复  引用  查看    
2008-06-04 19:34 | 陈新丰      
不错,有机会看看这本书
新用户注册  刷新评论列表  

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-12 04:38 编辑过
成果网帮您增加网站收入

相关文章:
ASP.NET AJAX入门系列
【翻译】Scott Mitchell的ASP.NET2.0数据指南中文版索引
.NET设计模式系列文章
ASP.NET AJAX入门系列(2):使用ScriptManager控件
prototype.js 1.4版开发者手册(强烈推荐)
ASP.NET 大文件上传组件[无组件上传](AspnetUpload 2.3 release)[免费版序列号放送中...]

相关链接:

所属分类的其他文章:
Google Reader/Google Notebook使用以前的英文界面的办法
关于控件部分的看法--读Programming ASP.NET中文版
分享一本入门级好书:Programming ASP.NET中文版

最新IT新闻:
JavaScript将成Silverlight的最大对手?
没有谷歌就活不下去的四个网站
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹
 



公告

view my mvp profile 看看有多少人来访问我的Blog了!
hotmail

<2008年6月>
日一二三四五六
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

与我联系

  • 发短消息

搜索

 

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿(168)

  • 给我留言
  • 查看留言

我参与的团队

  • 北京.NET俱乐部(0/1483)
  • 烟台.NET俱乐部(0/47)
  • ASP.NET AJAX (Atlas)学习(0/1347)
  • MVP(微软最有价值专家)团队(0/568)
  • 博客园培训团队(0/111)
  • Silverlight学习与研究(0/286)
  • CLR基础研究团队(0/387)

随笔分类(148)

  • ASP.NET(26)
  • Code Warehouse(20)
  • IronRuby,DLR(2)
  • LINQ(3)
  • Reading(3)
  • Training@cnblogs(23)
  • Ubuntu(4)
  • Windows Live(6)
  • Windows Mobile(7)
  • XHTML & Web Standard(54)

随笔档案(220)

  • 2008年3月 (2)
  • 2008年1月 (3)
  • 2007年12月 (3)
  • 2007年9月 (1)
  • 2007年8月 (2)
  • 2007年7月 (3)
  • 2007年6月 (3)
  • 2007年3月 (4)
  • 2007年2月 (3)
  • 2007年1月 (1)
  • 2006年12月 (1)
  • 2006年11月 (8)
  • 2006年10月 (6)
  • 2006年9月 (11)
  • 2006年8月 (5)
  • 2006年7月 (4)
  • 2006年6月 (1)
  • 2006年5月 (10)
  • 2006年4月 (8)
  • 2006年2月 (2)
  • 2006年1月 (1)
  • 2005年12月 (11)
  • 2005年11月 (13)
  • 2005年10月 (3)
  • 2005年9月 (1)
  • 2005年8月 (4)
  • 2005年7月 (3)
  • 2005年6月 (4)
  • 2005年4月 (5)
  • 2005年3月 (10)
  • 2005年2月 (7)
  • 2005年1月 (28)
  • 2004年12月 (15)
  • 2004年11月 (10)
  • 2004年10月 (5)
  • 2004年9月 (1)
  • 2004年6月 (13)
  • 2004年5月 (5)

文章档案(1)

  • 2005年5月 (1)

相册

  • ASPNET2tutorial
  • BlogUsing
  • My love and my friends
  • newGallery
  • 下一代网络图片

.net网站收藏

  • ASP.NET2.0 Tutorial
  • CodeBetter.com
  • F#
  • IIS.net
  • MS NewsGroup
  • NewsGroups
  • OnlyVC.org
  • VWD2005GuidedTour
  • ZDNet China软件技术专区

OSS 2007

  • Charsh
  • Kaneboy
  • Official Team Blog

Python

  • BeginnersGuide

好友的BLOG

  • DemoFox@JoyCode
  • DflyingChen
  • dudu
  • EricLee
  • hbifts
  • idior
  • Jesee Qing
  • Lion
  • Rickie
  • Samuel
  • Steph`s Website
  • 翱翔.Net
  • 陈敬熙
  • 发条木偶
  • 葛涵涛
  • 古道风
  • 寒枫天伤
  • 老猫の理想
  • 刘老师
  • 刘彦博
  • 吕震宇
  • 木野狐
  • 佘广
  • 王sir
  • 小涛
  • 小新
  • 肖老师
  • 旋哥

积分与排名

  • 积分 - 395314
  • 排名 - 53

最新评论

  • 1. re: .NET Beginner Training Step by Step开始启动
  • 早班加入
  • --石牌村夫
  • 2. re: .NET Beginner Training Step by Step开始启动
  • 申请加入!谢谢!
  • --童话@混子
  • 3. re: .NET Beginner Training Step by Step开始启动
  • 申请加入
  • --Winston
  • 4. re: .NET Beginner Training Step by Step开始启动
  • 申请加入
  • --Birdshover
  • 5. re: .NET Beginner Training Step by Step开始启动
  • 喜欢没有理由!
    申请加入
  • --倔强

阅读排行榜

  • 1. 英文名字及含义(25207)
  • 2. SQL Server 2005 Remote Access(15040)
  • 3. Visual Studio 2005 Team Edition和SQL Server 2005的下载(14319)
  • 4. Windows Installer 3.1(11487)
  • 5. Visual Studio 2005 Professional Released(10949)

评论排行榜

  • 1. .NET Beginner Training Step by Step开始启动(319)
  • 2. Windows Live Messenger 8.0 Beta 的邀请(100)
  • 3. 加入[ 下一代网络web技术(Next Generation Web Application)团队Blog ](88)
  • 4. 博客园新手.net技术培训活动(55)
  • 5. 为什么在vista上做开发?(54)
Copyright ©2008 维生素C.NET