更新时间:2012年06月05日18时26分 来源:传智播客.Net

接上篇【我来解惑】.Net应该学什么怎么学(二)
七、HTML、JavaScript、Dom
       HTML是对网页长什么样子的一个描述,也就是“这里显示一个超链接、那里显示一个按钮”都是通过HTML来进行描述的。HTML做出来的页面是静态、不变化,如果要实现“点击【计算】按钮的时候让表格放大显示”这样的动态效果,则要通过程序操作Dom,一般使用JavaScript这种脚本语言来操作Dom。

如果不想成为只会拖控件的开发人员的话,需要在学习ASP.Net之前把HTML、JavaScript、Dom这些好好学习。提到这一点有同学可能会提出异议“不是这样的呀,ASP.Net已经封装的很好了,拖几个控件上来就可以了,ASP.Net都帮我们生成HTML了,也不用学JavaScript,动态效果写C#代码就可以了”。
       ASP.Net中这种拖ASP.Net控件的开发技术就叫做WebForm,微软的WebForm封装是非常伟大的技术,能够将复杂的Web开发简化到可以像开发WinForm程序一样点击,不得不佩服微软技术的强悍。使用WebForm我们就可以进行傻瓜化的开发,要是每天的工作、做每个项目的时候都能一直这样“傻瓜”下去也是很美好的,但是很不幸有一些场合中是不能使用这种傻瓜化的开发方式的,举几个例子:

例子1:在网站的注册页面中让用户所在的省、市,提供两个下拉列表框(DropDownList),一个为省的列表框,一个为市的列表框,当用户选择不同的省的时候,市列表框中就列出这个省下的所有市供用户选择。
对于这样一个功能点,如果只会拖控件的人很可能会这么写(假设省列表框id为ddlProvince,市列表框id为ddlCity),在Page_Load中加载省列表到ddlProvince,然后在ddlProvince的SelectedIndexChanged事件中响应ddlProvince的选择变化,当ddlProvince选择变化后根据选中项来填充ddlCity。用这种方法实现最大的缺点就是页面会频繁的刷新,每次选择省以后页面都会唰一下的刷新一次,这在网速比较慢或者服务器压力比较大的时候是很慢的,而且用户体验很差。这种情况用JavaScript操作Dom的方法来操作才会比较好。

例子2:ASP.Net WebForm中可以使用UpdatePanel控件很轻松的实现AJAX效果,不用懂JavaScript、Dom、Json,把控件用UpdatePanel包裹起来AJAX效果就出来了。但是用UpdatePanel实现AJAX只能在对性能要求不高的场合使用,如果要开发互联网应用等对性能要求非常高的场合,UpdatePanel控件是没法使用的。这时候就需要手写实现AJAX,而手写AJAX则需要对JavaScript、Dom非常熟悉。

即使全部使用ASP.Net WebForm控件实现,也是需要对HTML熟悉才可以的,比如不可能项目中使用ListView控件默认生成的代码,都需要手动调整ListView的模板,而调整模板就需要手写HTML,不是什么都“拖一拖”就行的。微软现在还推出了一个WebForm的兄弟产品:ASP.Net MVC,ASP.Net MVC并不是替代WebForm的,各有所长,但是因为ASP.Net MVC的优点,以后肯定会有越来越多的项目使用ASP.Net MVC。在ASP.Net MVC中就没有WebForm中这么傻瓜化了,很多地方需要手写HTML代码,这就对HTML等要求更高。

上面讲了HTML、JavaScript、Dom的重要性,下面来讲一下具体要学哪些东西、怎么学。需要提前说明:Web开发中一个非常麻烦的一点就是HTML、Dom在不同浏览器有少量的差异性,也就是一段代码可能在IE中和FireFox中的效果不一样,对于初学者来说暂时不需要管那些差异性,降低学习中不必要的难度,学习的时候以一个浏览器为主就可以了。
       刚接触HTML的人可能感觉比较难,但是一旦熟悉了这种标签式的用法,HTML就变得非常简单了,HTML中标签比较多,标签的可用属性更多,做为一个初学者没必要把所有标签、属性都学习了,而且也不可能都掌握,把最常用的标签以及它们的常用属性掌握了即可,主要的标签有:p、br、div、font、a、input、img、li、table、select、textarea、span。学习HTML的时候一定要坚持手写HTML,千万不要用VisualStudio、Dreamweaver等中的可视化的拖放方式来编写HTML页面,如果只会在设计器可视化拖出HTML页面的话,后面的学习会困难重重。HTML学习的一个目标就是能够完全手写一个很多网站都有的那种静态注册页面出来。
       HTML中还有一个知识点:CSS,CSS是用来对页面进行美化的描述语言,通过CSS我们能够将按钮设置为红色或者给一个图片加上金色边框。CSS中有非常多的样式名,不需要掌握这么多样式名,学习的时候只要过一遍,大概知道每个样式名是做什么的就可以;也不需要学习怎么将页面做的看好,不需要研究那些好看的CSS效果到底是什么做出来的,因为那些工作是美工做的事情,即使是没有美工的小公司开发人员只要学会怎么“偷”别的网站做好的特效就可以了。初学者只要掌握几种CSS选择器和Div+CSS布局就可以。
       和ASP.Net后台用C#写代码不一样,对于Web前台页面的动态效果一般使用JavaScript(不用学已经在Web前端中被淘汰的VBScript)来编写,因此需要首先掌握JavaScript语言,JavaScript和C#的语法一样都是C语言发展过来,很多语法都和C#差不多,因此不用再从头学JavaScript语法,只要学习JavaScript和C#相比特有的语法就可以。JavaScript语言也有很多可以很深入研究的东西,比如闭包、面向对象的实现等,但是除非做Web游戏开发、开发JavaScript库等对JavaScript要求非常高的领域,如果是开发互联网站、业务系统等(这占到公司项目中的大部分)对JavaScript并没有太高的要求,只要熟悉一下JavaScript的语法就可以,然后在后面的Dom中通过练习逐步熟悉JavaScript。对于初学者来说JavaScript到底学到什么程度是够用了是很难界定了,大家可以参考【传智播客.Net视频】第7季JavaScript这套视频教程,然后学Dom的时候参考【传智播客.Net视频】第8季Dom》进一步练习就可以。
       很多初学者刚接触Dom的时候总是想弄明白“到底什么是Dom”,劝大家没必要纠结于这些概念,只要知道它是干什么的就可以,“通过JavaScript调用Dom中的属性、方法就可以动态的操作HTML页面”、“getElementById就是Dom、btn1.value=’abc’就是dom、btn1.onclick=myclick就是dom”,通过练习你就会明白这一点就可以了,咱们不是编教科书的,不用搞那些无聊的概念定义。
       Dom的东西非常多,还是那个原则,不用什么都记住,主要掌握下面几点:事件、动态设置事件、setInterval定时器、event对象、getElementById、动态创建Dom元素(createElement、innerHTML、innerText)。掌握这些东西还是要通过大量的练习来掌握的,只要能把第8季Dom这套视频中的练习熟练写出来这几个阶段的目标就达到了。
       JQuery目前是最火的一个JavaScript的库,千万不要以为是一个新的语言,听到过很多“Jquery是JavaScript的终结者,Jquery取代了JavaScript”的说法,殊不知,Jquery只是个JavaScript的一个封装库,尽快Jquery语法看起来非常奇怪,但是Jquery确实是完全符合JavaScript语法的一个封装库。Jquery只是对Dom操作的一个封装,学之前需要Dom基础,否则学起来会很晕。我不建议初学者学完了Dom以后立即学Jquery,还是用Dom多写一些程序以后再来学Jquery才会掌握的又牢靠又快速,我讲课的时候就在讲完了Dom以后隔了8天的.Net高级技术才讲Jquery也是基于这个考虑。参考书可以看《锋利的JQuery》。

.Net应该学什么怎么学(三)的更多相关文章

  1. .net基础学java系列(三)徘徊反思

    .net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...

  2. .Net应该学什么怎么学(二)

    更新时间:2012年06月05日18时23分 来源:传智播客.Net 接上篇<[我来解惑].Net应该学什么怎么学(一)>. 二.C#面向对象基础 初学者学面向对象的时候没必要(也做不到) ...

  3. python入门灵魂5问--python学习路线,python教程,python学哪些,python怎么学,python学到什么程度

    一.python入门简介 对于刚接触python编程或者想学习python自动化的人来说,基本都会有以下python入门灵魂5问--python学习路线,python教程,python学哪些,pyth ...

  4. 从零开始学ios开发(三):第一个有交互的app

    感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12 ...

  5. 一起来学Spring Cloud | 第三章:服务消费者 (负载均衡Ribbon)

    一.负载均衡的简介: 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,多服务器能够消除单个服务器的故障,减轻单个服务器的访问压力. 1.服务端负载均衡 ...

  6. 「浙江理工大学ACM入队200题系列」问题 H: 零基础学C/C++18——三位数反转

    本题是浙江理工大学ACM入队200题第二套中的H题 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例. ...

  7. 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略

    相信看了 每天学点SpringCloud(一):简单服务提供者消费者调用,每天学点SpringCloud(二):服务注册与发现Eureka这两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上 ...

  8. 《OD学hadoop》第三周0710

    一.分布式集群安装1. Hadoop模式本地模式.伪分布模式.集群模式datanode 使用的机器上的磁盘,存储空间nodemanager使用的机器上的内存和CPU(计算和分析数据) 2. 搭建环境准 ...

  9. 《OD学hadoop》第三周0709

    一.MapReduce编程模型1. 中心思想: 分而治之2. map(映射)3. 分布式计算模型,处理海量数据4. 一个简单的MR程序需要制定map().reduce().input.output5. ...

随机推荐

  1. Java典型应用彻查1000例:图形与网络游戏开发 PDF 扫描版[68M]

    <Java典型应用彻查1000例·图形与网络游戏开发>实例丰富,编排合理,可以让有初级Java基础的读者,从陌生到完全熟练地设计网络游戏,进而掌握3D立体绘图方法,适合作为Java网络游戏 ...

  2. 在ListView的右边添加字母列表

    在ListView的右边添加字母列表,点击某个字母时,列表就滚动到预期位置. <!-- 数字和字母栏在标题栏下边并且停靠在右边 --> <com.txrj.sms.component ...

  3. 【vue.js】windows下安装vue.js

    windows下搭建vue开发环境 Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常 ...

  4. PHP读取大文件的几种方法

    场景:PHP读取超大文件,例如1G的日志文件,我这里使用的是400M的access.log文件 1.使用file直接读取 <?php $starttime=microtime_float(); ...

  5. Ueditor编辑旧文章,从数据库中取出要修改的内容

    Ueditor编辑旧文章,从数据库中取出要修改的内容然后放置到编辑器中: <script type="text/plain" id="editor"> ...

  6. -174dBm的含义

    常温下(290K)一个热电阻会产生少量的噪声能量P=kTB k = 玻尔兹曼常数(1.38 x 10–23 J/K)T = 温度(K)B = 噪声带宽(Hz) 由于总噪声功率是测量带宽的函数,数值通常 ...

  7. mpu6050 DMP库的移植

    https://www.amobbs.com/thread-5528472-1-1.html 官方的运动库,必须通过这个才能启用MPU6050的DMP引擎(数据手册里完全不提这个东西,必须在官网注册登 ...

  8. 本地PC安装Centos 6.5 操作手册及遇到的问题

    我采取的是使用U盘安装 一.准备工作 1.下载Centos6.5 ISO文件 我在官网上下的6.5版本CentOS-6.5-x86_64-bin-DVD1.iso, 由于CentOS-6.5-x86_ ...

  9. 转 docker 部署 kafka

    原文链接 http://blog.csdn.net/snowcity1231/article/details/54946857 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 909 ...

  10. python标准库介绍——18 StringIO 模块详解

    ==StringIO 模块== [Example 2-8 #eg-2-8] 展示了 ``StringIO`` 模块的使用. 它实现了一个工作在内存的文件对象 (内存文件). 在大多需要标准文件对象的地 ...