丛书序
前言
第一篇 net framework 40简介
第1章 c#与net framework简介 1
11 net framework基础 1
111 什么是net framework 1
112 公共语言运行库 1
113 net类库简介 2
114 net framework的功能 2
12 c#编程语言简介 2
121 net编程语言介绍 2
122 c#程序设计语言 2
123 hello world示例程序 3
13 小结 4
14 常见面试题 5
15 习题 5
第2章 visual studio 2010集成化开发环境 6
21 visual studio 2010 ide介绍 6
211 解决方案资源管理器 7
212 文档窗口 8
213 错误列表和任务列表窗口 9
214 服务器资源管理器 11
215 对象浏览器 11
216 代码编辑器 11
22 visual studio 2010的功能特色 14
221 多目标支持 14
222 javascript代码智能提示和调试功能 15
223 内置的aspnet ajax支持 16
224 web站点与web项目支持 17
225 web设计器的改进 18
226 css功能的增强支持 19
227 嵌套的母版页支持 19
23 小结 21
24 常见面试题 22
25 习题 22
第3章 c# 40语言特色 23
31 局部变量的隐式声明 23
311 如何声明隐式局部变量 23
312 在foreach循环中使用隐式声明 24
313 隐式类型变量的限制 25
314 隐式类型的局部数组 26
315 隐式类型变量的作用 27
32 自动属性 28
321 理解自动属性 28
322 访问自动属性 29
323 自动属性的访问限制 30
324 自动属性和默认值 31
33 对象初始化器 32
331 理解对象初始化器语法 32
332 调用使用初始化语法的自定义构造函数 33
333 内部类型的初始化 34
334 理解集合初始化语法 35
34 扩展方法 36
341 定义扩展方法 36
342 调用扩展方法 38
343 扩展方法的使用范围 39
344 使用扩展方法扩展接口类型 40
35 匿名类型 43
351 理解匿名类型 43
352 匿名类型的内部呈现 44
353 匿名类型的相等语法 45
36 局部方法 46
361 理解局部方法 47
362 使用局部方法 48
37 lambda表达式 49
371 理解lambda表达式 49
372 剖析lambda表达式 52
373 在lambda中使用多语句块 52
374 多参数的lambda表达式 53
38 linq简介 54
381 什么是linq 55
382 linq示例 56
39 小结 59
310 常见面试题 60
311 习题 60
第二篇 aspnet开发基础
第4章 aspnet 40技术简介 61
41 aspnet技术介绍 61
411 aspnet 40的特点 61
412 一个简单的aspnet应用程序 62
42 aspnet程序结构 65
421 aspnet文件类型 66
422 aspnet目录介绍 66
43 aspnet配置 67
431 webconfig配置文件 67
432 嵌套配置设置 68
433 在webconfig中存储自定义设置 71
434 aspnet web站点管理工具wat 72
435 编程读取和写入配置设置 73
436 加密配置块 75
44 web窗体基础 77
441 基于事件的编程模型 77
442 自动回发特性(autopostback) 78
443 web窗体处理流程 79
444 aspnet中的page类 81
445 页面重定向 82
446 html编码 83
45 应用程序事件 83
451 globalasax全局文件 84
452 基本应用程序事件 85
46 小结 86
47 常见面试题 87
48 习题 87
第5章 aspnet服务器控件 88
51 html服务器控件 89
511 html服务器控件简介 89
512 htmlcontainercontrol和htmlinputcontrol类 91
513 html控件类 92
514 编程创建html控件 93
515 处理服务器端事件 94
52 web服务器控件 96
521 基本web服务器控件介绍 96
522 常用控件的属性介绍 99
523 列表控件介绍 102
524 可选择的列表控件 104
525 bulletedlist列表控件 108
526 表格式控件 109
53 验证控件 111
531 验证控件介绍 111
532 验证控件的基类basevalidator 112
533 使用requiredfieldvalidator强制用户输入 113
534 使用rangevalidator控件指定输入范围 113
535 使用comparevalidator比较值 114
536 regularexpressionvalidator正则表达式验证 114
537 customvalidator自定义验证 115
538 使用validationsummary显示验证信息 116
539 使用validationgroup属性 117
5310 编程使用验证控件 118
54 calendar日期控件 119
541 日期控件简介 119
542 日期控件格式化显示 121
543 限制日期 121
544 编程控制日期选择 123
55 广告轮询控件adrotator 123
551 广告文件设置 123
552 adrotator类介绍 125
56 multiview和wizard控件 126
561 multiview多视图控件 126
562 wizard向导控件 128
563 wizardstep向导步骤属性 129
564 wizard事件 130
57 小结 132
58 常见面试题 132
59 习题 133
第6章 aspnet应用程序状态管理 134
61 aspnet状态管理简介 134
62 viewstate视图状态 135
621 视图状态原理 135
622 在视图状态中存储对象 137
623 视图状态的安全 139
63 跨页传递信息 140
631 查询字符串 140
632 跨页回送技术 143
64 使用cookie保存会话信息 146
641 cookie技术简介 146
642 使用cookie保存信息 147
65 会话状态 148
651 会话状态简介 148
652 使用会话状态 149
653 配置会话状态 151
66 应用程序状态 157
67 小结 158
68 常见面试题 158
69 习题 158
第7章 异常处理和日志追踪 160
71 aspnet应用程序异常处理 160
711 异常处理基础 161
712 exception类 162
713 捕捉异常 164
714 异常的嵌套 165
715 自定义异常 166
716 finally语句块 168
72 记录异常 169
721 查看windows事件日志 169
722 写入事件日志 171
723 自定义日志 172
724 编程查看事件日志 173
73 错误页面 176
731 错误模式 176
732 自定义错误页面 177
74 页面追踪 177
741 启用页面追踪 178
742 页面追踪信息 178
743 写入页面追踪信息 181
744 应用程序页面追踪信息 182
75 小结 184
76 常见面试题 184
77 习题 184
第三篇 构建aspnet应用程序
第8章 aspnet中的样式、主题和母版页 185
81 在aspnet中应用css样式 185
811 创建样式 185
812 应用样式 189
82 主题 190
821 创建主题 190
822 创建命名皮肤 192
823 处理主题冲突 193
824 为整个网站应用主题 193
825 添加css样式 194
826 动态应用主题 194
83 母版页 195
831 创建母版页 195
832 默认内容 199
833 母版页和相对路径 200
834 在webconfig中配置母版页 201
835 修改母版页 202
836 动态加载母版页 204
837 母版页的嵌套 205
84 小结 208
85 常见面试题 208
86 习题 208
第9章 aspnet中的站点导航技术 209
91 站点地图 209
911 定义站点地图文件 209
912 使用sitemappath控件 211
913 sitemap类 214
914 url地址映射 215
92 treeview控件 217
921 使用treeview控件 217
922 以编程的方式添加节点 220
923 使用treeview控件导航 220
924 绑定到xml文件 223
925 按需加载节点 225
926 带复选框的treeview控件 226
93 menu控件 228
931 使用menu控件 228
932 以编程的方式添加菜单项 230
933 使用menu控件导航 231
934 一个站点地图示例 232
935 绑定到xml文件 235
936 menu控件样式 237
937 为menu控件应用模板 240
94 小结 240
95 常见面试题 241
96 习题 241
第10章 用户控件和绘图 242
101 用户控件 242
1011 创建用户控件 242
1012 使用用户控件 245
1013 在webconfig中注册用户控件 246
1014 用户控件中公开属性 247
1015 用户控件事件 248
1016 动态加载用户控件 249
102 动态绘图 251
1021 基本绘图 252
1022 绘制一个自定义的 253
1023 在web页面放置自定义 255
1024 格式和质量 257
1025 一个web绘图示例程序 260
103 小结 262
104 常见面试题 262
105 习题 263
第11章 aspnet ajax开发技术 264
111 aspnet ajax基础 264
1111 ajax技术简介 264
1112 aspnet ajax架构 267
112 aspnet ajax服务器端扩展 268
1121 声明scriptmanager控件 268
1122 使用scriptmanager分发自定义脚本 269
1123 在scriptmanager中注册web服务 270
1124 处理scriptmanager中的异常 272
1125 编程控制scriptmanager控件 275
1126 使用updatepanel控件 277
1127 使用多个updatepanel控件 279
1128 编程控制updatepanel控件 282
1129 使用updateprogress控件 283
11210 取消异步回送 285
11211 使用timer控件更新updatepanel 286
113 aspnet ajax服务器端控件扩展 288
1131 安装aspnet ajax control toolkit 288
1132 使用aspnet ajax扩展控件 289
114 小结 290
115 常见面试题 291
116 习题 291
第12章 web部件技术 292
121 web部件基础 292
1211 一个webparts示例程序 293
1212 定制webpartzone控件 299
1213 动态控制显示模式 300
1214 动态编辑webpart 303
122 web部件的个性化设置 304
1221 基本个性化设置 304
1222 个性化范围设置 306
1223 个性化webpart属性 310
123 小结 311
124 常见面试题 311
125 习题 311
第四篇 数据访问技术
第13章 adonet数据访问技术 313
131 adonet基础 313
1311 adonet架构 313
1312 adonet数据提供者 314
132 连接数据库 315
1321 sqlconnection数据库连接类 315
1322 使用sqlconnectionstringbuilder连接字符串 317
1323 关闭和释放连接 318
1324 在webconfig配置文件中保存连接字符串 320
1325 连接池技术 322
133 与数据库交互 325
1331 使用sqlcommand *** 作数据库 325
1332 为sqlcommand传递参数 327
1333 使用sqlcommand执行存储过程 330
1334 使用事务 332
1335 使用dataadapter对象 335
134 管理内存数据 337
1341 了解数据集 337
1342 使用datatable实现内存表 338
1343 使用dataset管理数据 340
1344 使用reader获取只读数据 345
1345 比较dataset和datareader 348
135 小结 348
136 常见面试题 348
137 习题 349
第14章 aspnet数据绑定技术 350
141 绑定技术基础 350
1411 单值绑定 350
1412 重复值绑定 352
142 数据源控件 357
1421 数据绑定的页面生存周期 358
1422 sqldatasource控件 358
1423 使用参数过滤数据 361
1424 更新数据和并发处理 363
1425 编程执行sqldatasource命令 366
1426 objectdatasource控件简介 369
1427 创建业务对象类 370
1428 在objectdatasource中使用参数 374
1429 使用objectdatasource更新数据 376
14210 linqdatasource数据源简介 378
14211 使用linqdatasource更新数据 381
143 小结 381
144 常见面试题 382
145 习题 382
第15章 数据绑定控件 383
151 gridview控件 383
1511 使用gridview控件 383
1512 定制gridview控件的列 385
1513 使用模板列 387
1514 gridview控件的选择功能 390
1515 使用gridview控件创建主从表 392
1516 gridview控件事件 392
1517 编程格式化特定行列值 393
1518 为gridview控件添加统计信息 395
1519 实现分页、排序效果 397
152 listview和datapager控件 398
1521 listview控件简介 398
1522 listview控件的分组布局 402
1523 使用datapager分页 404
153 detailsview和formview控件 405
1531 detailsview控件简介 406
1532 定义detailsview字段 408
1533 在detailsview中显示图像 410
1534 编程 *** 作detailsview 414
1535 formview控件简介 414
154 小结 415
155 常见面试题 416
156 习题 416
第16章 缓存技术 417
161 理解aspnet缓存技术 417
162 输出缓存 418
1621 定义输出缓存 418
1622 查询字符串缓存 418
1623 自定义缓存 419
1624 用户控件缓存 420
1625 使用缓存配置 421
1626 使用httpcachepolicy类控制缓存 422
163 缓存数据 422
1631 添加缓存项 423
1632 指定缓存依赖 425
1633 缓存优先级 425
1634 使用缓存删除通知 426
1635 数据源控件缓存 429
164 缓存依赖 430
1641 文件和缓存项依赖 430
1642 聚合依赖 431
1643 配置sql缓存依赖 432
1644 使用sql缓存依赖 433
165 小结 434
166 常见面试题 435
167 习题 435
第17章 linq技术 436
171 linq基础 436
1711 linq简介 436
1712 延迟执行 438
1713 linq表达式简介 438
172 linq to dataset *** 作内存表 445
1721 linq to dataset简介 445
1722 类型化dataset 448
173 linq to sql *** 作数据库 450
1731 数据实体类 450
1732 datacontext类介绍 451
1733 在aspnet中应用linq to sql 454
1734 自动生成数据实体类 456
1735 生成存储过程方法 457
1736 提交更改 458
174 小结 461
175 常见面试题 461
176 习题 462
第五篇 aspnet应用程序安全
第18章 成员和角色管理技术 463
181 aspnet membership api简介 463
182 使用membership api 464
1821 配置表单身份验证 465
1822 创建membership数据存储 466
1823 配置membershipprovider和数据库连接 468
1824 创建和验证用户 470
183 使用登录控件 471
1831 login控件 472
1832 loginstatus控件 476
1833 loginview控件 476
1834 passwordrecovery控件 476
1835 changepassword控件 478
1836 createuserwizard控件 478
184 使用membership类 481
1841 获取用户列表 482
1842 创建、编辑和删除用户 483
1843 验证用户 485
185 角色和授权 486
1851 url授权 486
1852 文件和文件夹访问授权 487
1853 使用角色管理器 488
1854 使用roles api配置基于角色的授权 489
186 小结 491
187 常见面试题 491
188 习题 492
第六篇 aspnet应用程序实战
第19章 aspnet求职系统 493
191 系统总体设计 493
1911 系统功能介绍 493
1912 系统架构简介 495
192 数据库设计 496
1921 数据表结构 497
1922 数据表关系 500
193 系统核心层设计 500
1931 aspnet ajax客户端脚本扩展 501
1932 webconfig系统配置 506
1933 数据访问类的设计 510
1934 业务对象类设计 517
194 表现层技术分析 520
1941 aspnet ajax技术的应用 521
1942 基于ajax的导航栏 526
1943 母版页 528
1944 主题和皮肤 529
1945 用户控件 530
1946 webparts控件的应用 534
1947 个性化设置 536
195 求职者功能设计 539
1951 发布简历 540
1952 搜索工作职位 545
1953 收藏工作职位 549
196 企业雇主功能设计 551
1961 登记公司信息 551
1962 查看和添加工作职位 554
1963 添加/编辑工作职位 556
197 小结 559
1 PHP, Hypertext Preprocessor, 动态网页开发语言。
PHP,Hypertext Preprocessor,最初在95年问世(那时以前叫Personal Home Page)。PHP最初是制作动态网页的服务器端脚本语言,但
现在PHP已经可以作为command line运行有GUI的standalone的程序。现在是PHP Group在开发和管理PHP的规则,功能等。但PHP大都用在
dynamic webpage scripting上,好象没听过谁用它开发desktop application。
PHP使用率是制作动态网页的几种语言(JSP,ASP,ASPNET, ColdFusion, Ruby, SHTML)中最高的。因为PHP在95年已经问世至今,以有
相当数量的开发者。我们熟知的国际权威百科全书Wikipedia有90%用PHP写的,而且国外流行多年的“校内网”FaceBook 也全部用PHP写
的,同时Yahoo, Sony官方,Pepsi百事官方这些网站都是用PHP的。根据维基百科(Wikipedia)的说法,PHP被超过20,000,000的网站所
用,被超过1,000,000的网页服务器所用。目前到2008五月,PHP最新版本为526。
PHP不仅使用率高,而且能兼容各类平台。它可以在大多数网页服务器上运行(如:MS IIS,Apache),大多数 *** 作系统上运行(如:
Windows, UNIX, Linux)。而且PHP支持很大多数牌子的数据库:MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Gerneric
ODBC等。
结构方面,虽比JSP,ASPNET差点,PHP也有很多Framework可用。微软的ASPNET结构是出名的,JSP的MVC结构也很厉害,所以开发大网
站ASPNET,JSP都很快。而PHP Group也为此付出很大努力,来开发自己特有的结构适应不同类型的大网站的需求。常见的PHP的
Framework有:CakePHP, PRADO, Symfony, Zend等。
另外LAMP结构,是PHP最常用的开发模式,即是配合Linux, Apache, MySQL, PHP,合称LAMP。
2 ASP(Active Server Pages), ASPNET 两个分别是 动态网页开发语言,动态网页开发语言和结构
(1) 关于ASP的淘汰
ASP, Active Server Pages已经过时了, 但因为其出现的早,96年就有了,所以现在有些中小网站还用(但,使用最多最广的是PHP,最
初于95年现世。ASP是微软第一代动态网页开发语言,只能在Windows系统 + MS IIS服务器平台下运行。
Wikipedia, Facebook, 百度等都用PHP,PHP学习的简单度和ASP差不多;JSP稍微难点,JSP用的一般都是银行,购物等安全性较高的网站
,Google也用JSP)。但随着开发者的各种需求,ASP以后可以被ASPNET取代,因为微软停止对其的一切技术维护与功能更新。ASPNET是
革新版本的ASP(注意是“革新版本”,而非“改进版本”),或者说是完全新一代的Dynamic Web Scripting。
ASP代表着传统的dynamic web scripting,与ASPNET没什么关系,学了确实也没用。因为ASP不象CGI(Common Gateway Interface),
CGI是动态网站制作的始祖,所有ASP,JSP,PHP什么的都根据CGI演化而来,而且ASP,PHP,JSP都包含了些 CGI的东西;而ASP却没有被
衍生出任何新技术,ASPNET也不算基于ASP,只能说ASPNET开发理念,library,功能完全是基于NET的其它组件。
其实PHP,JSP,ASP明白其中一种,其它的都很容易学会了。如果非要学学传统的dynamic web scripting,那就学学PHP吧,不比ASP难,
但比ASP功能多,稳定性好,PHP5运行速度也比ASP快很多(JSP稍难因为要学点 Java)。学了PHP或JSP什么的,对学ASPNET有好处,而
且还可以直接用PHP,JSP进行开发。去google差差英文资源,有评价PHP 最好的,有评价JSP最好的,还从没有听谁说过ASP最好。
ASPNET毕竟在NET中,所以ASPNET还是有相当地位的。
(2) 关于ASPNET的优势
ASPNET是微软NET Framework的一部分。伴随NET 10在2002的问世,ASPNET也出现在动态网页开发语言的家族中(与
PHP,JSP,ColdFusion, Ruby, SHTML等并行了)。
功能上,ASPNET比ASP有更强大的library, 更好的稳定性。 ASPNET可以使用NET Framework中所有组件(也就是说NET能实现的,
ASPNET一样能实现),功能上显然强大于传统功能单调的ASP。最强的技术支持Web Service, 而且有NET的所有library做后盾。而且
ASPNET 在NET 35中还有微软专门为AJAX开发的功能--ASPNET AJAX。
结构上,传统的ASP把所有代码混为一团,简单的用<%%>把HTML和VBScript(或JScript)分开,实现动态输出 HTML。因为ASPNET模仿
JSP的MVC网页结构,微软为ASPNET开发了自己的Code-Behind结构,将 presentation(文件拓展名:aspx)和business logic(文件拓
展名:cs或vb等)分离。同时Code-Behind模式也实现了让ASPNET开发者用NET中最普通Winform的开发模式来开发网站,方便非网页开
发者制作动态网站。所以ASPNET更容易维护,比ASP更适合于Enterprise Level 的大网站开发。
由于ASPNET比JSP,PHP等更接近于NET Winform的开发。如Tree View, Datagrid View(即高级Table)等高级UI,都可以直接用
ASPNET中的Web Control来实现,这比传统的使用JavaScript + XTHML + CSS的DHTML开发方式简单不少,也更好维护。同时ASPNET开发
这可以定义自己的User Control,制作自己特别的一种UI(如网站LOGO,版权等部分),而且此User Control可以被存为ascx文件,方
便让每一页(aspx)来使用。
运行速度上,ASPNET模仿了JSP的预编译机制(Pre-Compile)。使编译好的代码(MSIL语言)在网页服务器上运行。这样比传统的ASP,传统
PHP(PHP4以前版本)更快,因为传统的ASP是直接运行开发者写的Script,相当于每运行一次,就得编译一次那么慢。 ASPNET可以用
VB, C#, J#等所有NET Framework的语言开发(但其实每种语言做的东西都一样 就象山东话, 东北话, 写出来都是中文:)
不过ASPNET对出学者可能有点难 因为它其实在模拟desktop application development,即Winforms开发的模式, 不象传统的JSP,
PHP, ASP这样容易明白。传统的Dynamic Server Scripting, 象PHP 5, 这是现在最简单的, 最有效的了。( 那个JSP也不难 如果有钱
还可以考虑下Adobe ColdFusion。)
ASPNET的新潮的Dynamic Server Scripting, 在其带动下SUN也推出自己的JavaServer Faces (其实是拓展JSP,但JSF无法取代JSP), 和
ASPNET很象, 也有很多Web Control(JTable, JTree),同时JSF也曾强了对WEB SERVCIE的支持, 也很适合ENTERPRISE LEVEL 的网站。
(3) ASP与ASPNET的优劣总结:
-- ASP已经被微软停止更新;ASPNET却在NET(10, 20, 30, 35)中突飞猛进;
-- ASP在96年出现,并没有引领一个潮流,PHP,ColdFusion都出现于95年,引领了整个潮流;ASPNET引领新的动态网站开发潮流,SUN
的JSF(JavaServer Faces)就是与ASPNET极其相似;
-- ASP大多被用在是中小网站;PHP被Wikipedia, Facebook, 百度所用,JSP被GOOGLE所用;
-- ASP不支持Web Service; ASPNET支持Web Service。要是了解NET中的Web Service在大组织系统中的重要性,就能立杆见影的看出差
距
-- ASP开发AJAX比较麻烦;而ASPNET专门用AJAX控件,更方便。要是了解Web 20,那么AJAX是什么地位,就不用我说了吧。
-- ASPNET模仿JSP,是pre-compile的;ASP不compile,直接运行Script的速度显然没有compile之后的快。
-- ASPNET的唯一缺点,就是开发用的IDE--Visual Studio Professional比较贵(express版免费的功能太少);ASP的唯一优点是,其
学起来最简单,跟PHP一样简单,比JSP简单,更比ASPNET简单几倍。
3 NET Framework
NET Framework的概念就大了。NET Framework是微软开发的一种软件开发技术。主要用来开发MS Windows系统上的各类软件。NET主要
包含一个庞大的library(解决常见编程问题)和一个virtual machine(管理程序的运行)。可以说Windows是微软的命根:),所
以NET就是微软占领软件市场的关键。
NET Framework的library叫做BCL, Base Class Library,包含了在各种领域的大范围的编程需要,如user interface用户界面,data
access数据接入,database connectivity, cryptography, web application development网站开发,numeric algorithms数学计算,
network communications网络交流等。开发者利用各种BSL来构成自己的代码,进而开发出多样的应用程序。
NET写出的程序在CLR, Common Language Runtime上运行。CLR是一个application virtual machine来帮助运行开发者写的程序。CLR提
供很多重要功能,如:security安全,memory management内存管理,exception handling错误控制。
BSL,CLR构成了强大的NET Framework。
NET Framework主要安装在Windows Server 2008, Windows Vista。小版本的NET Framework还安装在Windows Mobile系统上。但是家用
Windows XP等系统一样可以安装NET Framework来运行用NET写的程序。
平时在学校学习,通常学习NET中的三个主要技术:Winforms(桌面应用程序开发,就是平时普通程序如QQ,Skype可以用它,但其实QQ
用C,C++写的), ASPNET(网页,平时在IE,FireFox上看的网页可以用它), ADONET(接入数据库,处理相关数据)。但NET不是一种
语言。写NET程序可以用任何NET支持的语言,如:C#, VBNET, J#等等。明白其中一种就可以了。
NET概念挺大,东西也非常非常多。与之相似的技术有SUN的Java技术(分三个技术部分Java SE, Java EE, Java ME)。
先简单回顾下aspnet过去十年
mvc流行前
aspnet的服务端控件,将html和js一起封装,很多客户端事件自动通过生成的js将数据重新post回服务端。而对于很多刚入门的小伙伴来说,仅仅靠拖放控件和写C#代码就可以实现一个可用的Web项目,大大降低了入门门槛。相应的,服务端控件这种过度耦合的设计带来了很多缺点:自定义控制难,难以纯粹将前后端分离,导致aspnet从业人员既不能精通前段技术,又不能涉猎更多的后端技术(生态问题)。
这个年代,net被贴上了“拖放控件”的标签。
mvc流行后
微软推出了aspnetmvc,很多公司已经开始尝试前后端分离。就模式上面来说,已经和其它语言平台基于mvc的web项目开发模式无异。
但是aspnet本身的服务框架太杂乱,尤其是艰难(如果你留意过,甚至可以说难产)支持asyncawait异步编程后,他的同步上下文模型缺点太大:首先是源码的结构混乱,其次是使用过程很多人容易造成死锁,异步方法使用不当导致请求已返回上下文已释放然后找不到同步对象导致的异常。问题的根源是大部分程序员对线程了解不深,如果项目有正确的规范用法还好,一旦没有,产生异常很多人根本不知道问题出在哪里。博客园改造过程中就出现过的死锁,有兴趣的可以去看看博客园官方博客写过。
aspnetcore
新应用程序模型设计和代码实现,我非常喜欢。其它的不说,看看那简洁的Reqeust和Response对象,是不是就会让你欣喜?再看看中间件管道,上下文(Context)通过委托链链一路传递,再也不用晦涩的同步上下文,也移除了和Windows安全相关的特征。
整个架构更加清晰,喜欢做扩展的人绝对会有一日看尽长安花的快感。
自然性能也不用说,可以关注github上微软之前做过的除了mvc之外的性能测试对比。
net生态
拥抱开源后,netcore,standard,aspnetcore,efcore等一系列实现全部都有了,明年的netcore30还会包含客户端模型(wpf和winform,只能在windows下使用)。
github上面aspnet,dotnet,dotnet-architecture等分支包含大量微软直接维护的开源项目。
开源社区大部分的项目已经跟进将三方组件基于standard标准打包。
微软也久违地把散乱的文档汇集到docs子域名下
万事剧本,就欠生态!如果apache基金会下面的重要项目都有net的分支,相信依靠netcore必定可以再次抢占不少的份额。
前景
微服务流行后,其实内部可以混合多种平台提供服务,用aspnetcore做对三方组件需求不太大的业务服务是完全的可以的,基于微软一贯的作风,开发效率是很高的。
其实现在很多内部系统在用net,只是面向互联网相关的项目,更加需求丰富的三方资源,采用net的比较少。不过很多大的公司都有net的分支团队。毕竟在桌面和开发效率上的优势,还是有他存在的价值。
aspnet到底会如何发展,个人感觉还是要看社区的反应,要看生态是否能逐步丰富起来。
看在微软这么努力的份上,个人挺希望他能够扳回一局。
所以?
眼光放长远一点,平台只是我们的工具,一个IT人不应当把自己的技术范围限定到某一个平台。多学多积累,实际项目中应该针对需求、架构以及团队做出选择。
比如Java和net同时掌握,各取所长,基于他们重叠性较高的原因,学习成本并不高。何况绝大部分的知识和平台并无关系。
个人见解纯手打,欢迎大家评论或者提出意见。
具有7年项目开发与实施经验的实力作者,以大量实例,深入浅出地介绍ASPNET35的最新技术,结合完全商业化的应用项目,真实再现ASPNET35技术的综合运用。
20节视频教学课程,作者倾心奉献的535分钟多媒体教程,详尽讲解ASPNET35关键技术,另附《ASPNET35从入门到精通(基于C#)》完整范例程序及相关数据库文件。
你看下这篇文章可以吗,ASPnet方面的论文
现代远程教育成为教育信息化的重要实践内容和研究方向之一,硬件、软件和教育资源构成了现代远程教育的三大基础,网络课程则是现代远程教育资源的重要组成部分。
在现代远程教育中,教学活动围绕着网络课程展开,网络课程是实施现代远程教育目标的基本单元和核心因此运用较新的动态网络编程技术来开发适用于现代远程教育的高质量的网络课程成了我国发展现代远程教育的一个非常重要而迫切的课题。 网络课程是通过网络表现的某门学科的教学内容及实施的教学活动的总和。
网络课程的设计与制作是一项很复杂的任务,必须运用多种计算机技术才能够实现。现有网络课程编程技术有:ASP、PHP、JSP、VBScript 和JavaScript 等,但这些技术均在不同程度上都存在着程序复用程度低、重复劳动大、浏览速度低、程序源代码安全性差等一些缺陷和不足。
随着Internet 和信息技术的发展,现有网络课程日益彰显的技术缺点及不足,势必又制约着网络课程建设工程的发展。
ASPNET 是基于NET 框架体系结构的一部分,它为网络课程的建设与开发提供了强有力的技术支持和保障。与现有网络课程开发技术相比,提供了许多重要的优点如:简易性、安全性、可管理性等,且ASPNET可用Microsoft Visual Studionet、Dreamweaver 等多种工具进行开发,大大地加快了开发效率。
ASPNET从整个网页的执行架构、编写程序使用的语言和程序设计的方法上都较传统编程技术发生了质的改变。
论文在对网络课程开发的教学理论基础和现有网络课程开发技术分析的基础上,从分析NET 框架着手,具体解析了ASPNET 编程技术。其后,
介绍了利用ASPNET 技术实现了《网络规划与设计》网络课程的开发。该网络课程利用Web Form(网络窗体)技术设计动态页面,用ADONET 实现数据库的连接与访问,
用SQL Server 2000 实现数据库的管理,用Dreamweaver MX 2004 开发工具实现静态页面的设计,用Web Services(网络服务)实现网络的调用。
最后介绍了学生在线自测系统、在线答疑系统的总体设计与实现,且对其各模块的实现作了详细探讨,同时附有少量的重要源程序代码。
打开Internet 信息服务 新建虚拟目录 按提示配置好站点后右击虚拟目录中的主页-浏览 如果还提示要下载请检查IIS是否安装正确,版本跟系统是否对应
一般来说会在主页中 mainasp 加载 headasp,在DW中打开mainasp找找 <!#include file="headasp"-->类似的代码,看看这个路径是否正确,然后打开这个headasp文件看看是否能正常运行
本书学习导航如下:
要认识Web开发并掌握ASPNET的开发语言的语法,请仔细阅读第0~6章。
要了解ASPNET网络开发的核心对象,请仔细阅读第3~6章。
要学习Visual Studio 2008的ASPNET 35应用,请仔细阅读第1~10章。
要学习ADONET开发,请仔细阅读第11~14章。
要掌握ASPNET 35网络开发的一些高级技巧,请仔细阅读第15~22章。
要学习ASPNET 35开发大型案例,请仔细阅读第7~12章,第21~22章。
要掌握ASPNET在XML和AJAX上的特长,请仔细阅读第13章和第20章。 0 学习Web开发必备知识 22
01 基础概念 22
011 什么是网页 22
012 网页开发技术 22
013 Web开发相关技术 24
02 搭建开发环境 24
021 安装Visual Studio 2008 24
022 Visual Studio 2008 IDE简介 26
023 实现第一个ASPNET程序 27
03 IIS 7 Web服务配置 28
031 安装IIS 7 28
032 配置 IIS 7支持的NET版本 29
033 浏览第一个ASPNET程序 31
04 C# 30语言基础 32
041 C#简介 32
042 变量和常量 32
043 运算符 33
044 流程控制 35
045 隐性局部变量 37
046 Lambda表达式 37
047 LINQ集成查询概述 38
05 编码规范 39
051 好的编码结构 39
052 好的注释风格 40
053 好的命名规范 41
054 避免文件过大 41
承上启下 42
1 走进ASPNET 35 44
11 ASPNET 35概述 44
111 ASPNET 35——动态页面开发利器 44
112 创建网站 45
113 设计网站 46
114 网站的前台和后台 46
12 ASPNET 35动态网页剖析 48
121 前台客户端的事件处理 48
122 后台服务器端的事件处理 49
123 网站处理网页的顺序和原理 50
承上启下 51
2 C#面向对象的特性 52
21 面向对象编程概述 52
211 什么是类和对象 52
212 用C#如何创建类 53
213 用C#如何创建对象 54
214 什么是面向对象编程 54
22 面向对象的技术 55
221 接口 55
222 用C#如何创建接口 55
223 继承 56
224 用C#如何实现继承 56
225 多态 57
226 用C#如何实现多态 58
23 面向对象开发的简单实例 58
231 面向对象功能设计 58
232 面向对象的类设计 58
233 面向对象的应用 59
承上启下 61
3 ASPNET核心对象 62
31 Page类 62
311 Page类概述 62
312 探索页面生命周期 63
32 ASPNET核心对象 65
321 利用Response输出信息 66
322 利用Request获取页面输入 67
323 利用Server获取服务器信息 69
33 共享数据 71
331 利用Application共享数据 72
332 使用Globalasax文件 73
333 利用Session共享数据 74
334 利用Session验证用户 76
承上启下 78
4 字符串 79
41 字符串String 79
411 比较字符串 80
412 判定首尾字符串 82
413 判断是否包含子串 82
414 定位字符和子串 82
415 格式化字符串 84
416 连接字符串 84
417 拆分字符串 85
418 插入字符串 86
419 填充字符串 86
4110 删除字符串 86
4111 复制字符串 87
4112 替换字符串 88
4113 更改大小写 88
42 动态串StringBuilder 88
421 比较String 89
422 设置容量 89
423 追加字符串 90
424 插入字符串 90
425 删除字符串 91
426 替换字符串 91
43 正则表达式Regex 91
431 正则表达式简介 92
432 构造正则表达式 92
433 使用Regex类 94
44 字符编码 95
441 字符编码概述 95
442 字符编码类 96
承上启下 98
5 数组和集合 100
51 数组 100
511 什么是数组 100
512 创建数组 102
513 数组基类Array 103
514 访问数组元素 104
515 转化元素类型 105
516 遍历数组元素 106
517 排序数组元素 107
518 查找数组元素 109
519 反转数组元素 110
5110 复制数组 111
52 集合 112
521 什么是集合 112
522 列表类ArrayList 113
523 创建列表 114
524 遍历列表 114
525 添加元素 115
526 插入元素 116
527 删除元素 117
528 简单排序 118
529 复杂排序 118
5210 查找元素 119
53 队列 120
531 什么是队列 120
532 队列类Queue 120
533 创建队列 120
534 元素入队 121
535 元素出队 122
54 堆栈 122
541 什么是堆栈 122
542 堆栈类Stack 123
543 创建堆栈 123
544 元素入栈 123
545 元素出栈 124
承上启下 125
6 调试和异常处理 126
61 程序调试技术 126
611 调试语法错误 126
612 调试逻辑错误 127
62 异常处理机制 129
621 异常类Exception 129
622 使用try-catch处理异常 130
623 异常处理的原则 131
承上启下 132 7 标准服务器控件 134
71 WebControls概述 134
711 什么是服务器控件 134
712 WebControls空间 135
72 输入控件 137
721 按钮Button 137
722 文本框TextBox 141
723 复选框CheckBox 143
724 单选按钮RadioButton 145
725 超级链接HyperLink 147
726 链接按钮LinkButton 148
727 图像Image 150
728 图像按钮ImageButton 151
729 图像热区ImageMap 152
7210 项列表BulletedList 154
73 列表控件 155
731 下拉框DropDownList 156
732 列表框ListBox 158
733 复选框列表CheckBoxList 159
734 单选按钮列表RadioButtonList 162
74 容器控件 163
741 面板Panel 163
742 表格Table 165
75 其他控件 169
751 广告栏AdRotator 170
752 日历Calendar 171
承上启下 174
8 HTML服务器控件 175
81 HtmlControls概述 175
811 比较标准控件 175
812 HtmlControls空间 176
82 输入控件HtmlInput 177
821 按钮HtmlInputButton 177
822 单行文本框HtmlInputText 180
823 多行文本框HtmlTextArea 182
824 隐藏文本框HtmlInputHidden 182
825 文件框HtmlInputFile 184
826 复选框HtmlInputCheckBox 186
827 单选框HtmlInputRadioButton 188
83 容器控件HtmlContainer 189
831 表格HtmlTable 190
832 列表框/下拉框控件HtmlSelect 192
84 图像控件HtmlImage 195
承上启下 197
9 数据验证控件 199
91 概述 199
92 验证控件 200
921 必填验证控件RequiredFieldValidator 200
922 比较验证控件CompareValidator 202
923 范围验证控件RangeValidator 205
924 正则验证控件RegularExpressionValidator 206
925 自定义验证控件CustomValidator 208
926 验证摘要控件ValidationSummary 211
93 注册页面示例 213
承上启下 216
10 用户控件 217
101 概述 217
1011 什么是用户控件 217
1012 何时使用用户控件 217
102 使用用户控件 218
1021 创建用户控件 218
1022 添加用户控件 219
1023 定义用户控件属性 220
1024 定义用户控件事件 221
1025 比较Web页面 221
承上启下 222 11 ADONET 224
111 概述 224
1111 ADONET的功能 224
1112 ADONET基本结构 225
1113 SystemData空间 225
112 连接数据库 226
1121 SqlConnection类 226
1122 连接数据库 227
1123 使用webconfig配置连接 228
1124 断开数据库 229
113 *** 作数据库 230
1131 SqlCommand类 230
1132 查询数据 231
1133 SqlDataReader类 232
1134 *** 作数据 233
114 内存数据对象 234
1141 SqlDataAdapter类 235
1142 DataSet类 237
1143 DataTable类 239
115 SQL基础 243
1151 SQL基础 243
1152 创建数据库CREATE DATABASE 244
1153 删除数据库DROP DATABASE 244
1154 创建表CREATE TABLE 245
1155 修改表UPDATE TABLE 246
1156 删除表DROP TABLE 248
1157 插入数据INSERT 248
1158 修改数据UPDATE 249
1159 删除数据DELETE 249
11510 SQL简单查询 249
11511 使用GROUP BY对结果分组 252
11512 使用DISTINCT对结果去重 253
11513 使用ORDER BY对结果排序 253
11514 使用函数和表达式 254
11515 使用运算符 254
116 LINQ基础 254
1161 LINQ查询数据库原理 254
1162 在项目中添加数据库映射类 255
1163 使用LINQ *** 作数据库——查询、增、删、改 256
承上启下 257
12 数据控件 258
121 概述 258
122 网格视图GridView 259
1221 认识GridView 259
1222 GridView中的列类型 260
1223 自动生成数据列 261
1224 使用BoundField列显示数据 264
1225 使用CommandField列编辑数据 266
1226 使用CommandField列删除数据 268
1227 使用CommandField列选择数据 270
1228 使用HyperLinkField列链接数据 271
1229 使用ButtonField列灵活 *** 作数据 273
12210 分页浏览数据 275
123 列表控件 276
1231 把DataSet绑定到DropDownList 277
1232 把DataReader绑定到ListBox 279
1233 把DataTable绑定到CheckBoxList 280
1234 把HashTable绑定到RadioButtonList 282
124 使用LinqDataSource数据源控件 284
1241 使用SqlDataSource生成支持增删改的GridView 284
1242 使用LinqDataSource生成支持增删改的GridView 285
125 DataPager控件和ListView控件 287
1251 ListView绑定数据 287
1252 ListView结合DataPager控件实现数据分页 288
承上启下 289
13 XML数据 *** 作 290
131 NET框架中的XML 290
1311 什么是XML 290
1312 XML文档对象模型DOM 291
1313 SystemXml命名空间 292
132 读取XML 292
1321 使用XmlDocument读取XML 293
1322 使用XmlReader读取XML 293
1323 使用XmlNode读取节点 297
133 查询XML 298
1331 基本XPath表达式 299
1332 限定查询范围 299
1333 使用函数设置查询条件 300
1334 使用运算符设置查询条件 300
1335 使用通配符模糊匹配 301
1336 综合示例 301
134 修改XML 302
1341 创建新DOM节点 302
1342 创建DOM节点属性 303
1343 修改DOM节点 304
1344 删除DOM节点 305
1345 保存DOM树 306
135 与DataSet交互 307
1351 使用DataSet加载XML数据 307
1352 使用XmlDataDocument加载关系数据 309
承上启下 310
14 文件 *** 作 311
141 *** 作文件 311
1411 创建文件 312
1412 复制文件 312
1413 重命名文件 312
1414 删除文件 313
142 读写文件 313
1421 使用StreamWriter写入文件 313
1422 使用StreamReader读取文件 314
承上启下 315 15 母版页 317
151 静态母版页 317
1511 创建母版页 318
1512 向母版页添加控件 319
1513 使用母版创建内容页 320
1514 挖掘母版页的机制 321
152 与母版页交互 322
1521 母版页和内容页的生命周期 322
1522 母版页内部的控件事件 323
1523 在母版页中访问内容页控件 324
1524 在内容页中访问母版页控件 325
153 动态选择母版页 326
承上启下 328
16 站点导航系统 330
161 ASPNET导航系统概述 330
1611 导航概述 331
1612 从网站到导航控件 331
162 站点地图SiteMap 332
1621 SiteMap概述 332
1622 用SiteMapNode构造SiteMap 333
1623 用SiteMapProvider提供数据 333
1624 用默认SiteMapProvider提供数据 334
1625 用个性配置SiteMapProvider提供数据 337
163 导航控件 339
1631 使用SiteMapPath导航 339
1632 使用TreeView导航 341
1633 使用Menu导航 343
164 可编程导航 345
1641 为网站配置多个SiteMapProvider 345
1642 用XML创建TreeView 348
1643 用XML创建Menu 350
承上启下 351
17 样式和主题 352
171 样式表CSS 352
1711 什么是CSS 352
1712 指定HTML元素的样式 353
1713 指定HTML服务器控件样式 355
1714 指定标准服务器控件样式 355
1715 CSS的基本语法 357
1716 利用VS2008创建样式表 360
172 主题和外观 361
1721 什么是主题和外观 361
1722 建立主题和外观 362
1723 为所有页面指定主题 364
1724 为特定页面指定主题 364
1725 为特定控件指定主题 365
1726 动态指定主题和外观 365
承上启下 366
18 Web Part 367
181 概述 367
1811 先睹为快 367
1812 认识Web Part 368
1813 页面管家WebPartManager 369
1814 用户数据库配置 370
182 个性化设置页面 370
1821 使用WebPartZone划分页面 371
1822 个性化设置页面布局 373
1823 向页面添加Web Part控件 375
1824 编辑Web Part控件的属性 378
183 Web Part之间的通信 380
承上启下 382
19 成员和角色管理 384
191 成员服务 384
1911 成员服务概述 384
1912 Membership类 385
1913 创建新用户 386
1914 验证用户身份 391
1915 MembershipUser类 392
1916 获取用户信息 393
192 成员管理控件 394
1921 成员管理控件概述 394
1922 使用Login控件登录用户 395
1923 使用CreateUserWizard创建新用户 396
1924 使用LoginName得到用户名 398
1925 使用LoginStatus显示登录状态 398
1926 使用ChangePassword修改密码 399
1927 使用PasswordRecovery找回密码 399
193 角色管理 400
1931 角色管理概述 401
1932 Roles类 401
1933 配置角色管理 402
1934 使用管理工具管理角色 403
1935 使用角色控制页面行为 405
承上启下 408
20 AJAX程序设计 409
201 认识AJAX组件 409
202 脚本控制器ScriptManager 409
2021 脚本控制器ScriptManager的结构 410
2022 使用ScriptManager调用脚本文件 410
2023 ScriptManager调用Web服务 411
2024 动态注册ScriptManager 413
203 代理控制器ScriptManagerProxy 414
2031 用ScriptManagerProxy代理ScriptManager 414
2032 在母版页中应用ScriptManagerProxy 414
204 局部更新控件UpdatePanel 416
2041 UpdatePanel控件的结构 416
2042 局部更新的简单示例 417
2043 UpdatePanel的属性UpdateMode和ChildrenAsTriggers 418
2044 UpdatePanel的触发器Triggers 419
2045 动态更新UpdatePanel的内容 420
205 更新进度提示控件UpdateProgress 421
2051 认识UpdateProgress 421
2052 UpdateProgress简单实例——实现代码更新提示 422
206 定时控件Timer 423
2061 认识Timer 423
2062 使用Timer控件定时更新实例 423
2063 使用一个Timer定时更新多个UpdatePanel实例 424
承上启下 425 21 Web系统的多层结构 427
211 Web系统的三层结构 427
212 多层结构之NorthWind 428
2121 整体结构 428
2122 数据访问层DAL 428
2123 业务逻辑层BLL 431
2124 用户表示层UI 432
承上启下 433
22 三层结构的新闻管理系统 434
221 新闻管理系统功能预览 434
222 数据库设计 435
2221 数据库设计注意事项 435
2222 数据库中各表结构 436
2223 创建网站并映射表实体 438
223 网站整体布局设计 439
2231 母版页设计 439
2232 网站三层结构设计 440
224 网站会员管理功能 440
2241 会员注册功能 440
2242 会员登录功能 442
2243 会员资料修改功能 444
2244 在线会员资料统计功能 447
225 新闻分类功能 448
2251 添加新闻分类 448
2252 修改新闻分类 450
2253 删除新闻分类 452
226 新闻管理主要功能 454
2261 添加新闻 454
2262 编辑新闻 457
2263 浏览和删除新闻 459
227 公告管理功能 462
2271 添加公告 462
2272 编辑公告 463
2273 浏览和删除公告 466
228 友情链接管理功能 468
2281 添加友情链接 468
2282 浏览和删除友情链接 469
229 评论管理功能 471
2210 会员浏览网站主要功能 473
22101 浏览新闻功能 473
22102 浏览公告功能 475
22103 浏览新闻 477
22104 其他普通用户功能 478
2211 一些网站 *** 作技巧 478
22111 上传文件 479
22112 创建并引用用户控件 479
2212 网站的一些主要截图 480
承上启下 481
23 简易论坛系统 482
231 AJAX控件包 482
232 论坛的功能简介 483
233 论坛中的AJAX技术应用概况 484
234 论坛的数据库设计 484
2341 配置存取ASPNET服务的数据库 484
2342 创建论坛中的数据表 486
2343 论坛中数据表之间的关系 486
235 论坛的数据库设计 487
2351 配置存取ASPNET服务的数据库 487
2352 配置存取ASPNET服务的数据库 488
236 发表留言主题的功能 489
2361 设计发表留言功能的布局 490
2362 实现发表留言功能的主要方法 492
237 浏览留言主题的功能 494
238 留言回复的功能 496
2381 显示所有的回复 496
2382 添加回复 498
2383 修改回复模板支持AJAX 501
2384 为删除按钮添加确认提示 503
239 论坛短消息功能 504
2391 发送短消息 504
2392 接收短消息 506
2393 AJAX显示短消息提示 508
2310 用户自定义界面风格功能 510
23101 启用ASPNET的Profile配置 510
23102 使用AJAX ProfileService实现个性化界面定制 511
总结 514
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)