-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathAsp.net 4权威指南=马伟;Note=Erxin.txt
453 lines (420 loc) · 19.9 KB
/
Asp.net 4权威指南=马伟;Note=Erxin.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
Asp.net 4权威指南=马伟;Note=Erxin
:预备知识
>ASP.net是跨浏览器和跨设备的
>Asp.net 2.0特点
自带控件, 模板, 主题皮肤, 个性用户配置, 成员资格和角色管理, 配置和管理工具
>Asp.net 3.5特点
内置对ajax支持, 引入LINQ, 对silverlight支持
>Asp.net 4.0特点
- vs2010特点
起始项目模版, 多定向支持, 多显示器支持, asp.net html javascript代码片段, 代码智能提示
-可扩展输出缓存, 预加载web应用(只能在windows server2008r2 的iis7.5上运行), 永久重定向页面, 会话状态压缩, 简介的webconfig
-asp.net窗体
page.metalKeywords, page.metalDescription属性, 支持位页面启用视图状态, 支持最近引入的浏览器和设备
-asp.net路由
-设置客户端id, clientId, 每个空间都增加一个属性ClientIdMode提供检索浏览器端显示的控件ID值
-在gridView和listView控件中保持行选择
-使用css简化formView控件内容的样式设置
-QueryExtender控件筛选控件
-保留呈现的向后兼容, 可以再配置文件中说明生成的网页兼容asp.net3.5版本
<system.web>
<pages controlRenderingCompatibilityVersion="3.5"/>
</system.web>
-table控件页眉页脚
>动态数据
>asp.net chart控件, 提供多种视图, 支持ajax和jquery
>microsoft ajax功能
>asp.net mvc
>asp.net网页代码模型
单文件模型, 代码隐藏模型使用分不类实现
>asp.net页面iis7.0生命周期
资源请求, 管道接受队应用程序的第一个请求, 每个请求创建响应对象, 将httpApplication对象分配给请求, 由httpApplication管线处理请求
>asp.net配置文件
machine.config, 在%windir%\microsoft.net\framework\version_number\config\
包含的部分, asp.net ajax, asp.net dynamic data, asp.net routing, asp.net chart
>web.confgi文件, web.debug.config, web.release.config让web引用程序中的配置文件能够从debug转换到release配置文件
在项目配置中configuration manager可以设置使用的配置文件, 在项目管理中右键单击配置文件可以配置transform的配置文件名
- web.config配置继承
- 常用项
customErrors, connnectionStrings, appSettings
- 程序访问配置文件
system.web.configuration.webConfigurationManager, system.configuration.configurationManager
>全局引用程序类global.asax, 继承自httpApplication维护一个httpApplication对象池
>asp.net应用分类
- web网站
- web引用程序, 类似于winform引用程序
:html服务器控件
>共有属性
attributes, 所有属性名与值对
disabled
style
tagName, 包含runat="server"属性的标记的元素名
visible
所有html输入控件共享的属性
name, 设置htmlInputControl的唯一标示
innerHtml
innerText
>是对普通html控件的扩展使之具有服务器事件响应与跨浏览器特性
:web标准服务器控件
>是扩展的web控件, 特点
丰富的对象模型,
自动浏览器检测,
部分控件可以使用templates,
部分控件可以指定事件立即发送服务器还是缓存后发送
可将事件从嵌套控件传递到容器控件
>与html服务器控件区别
- 不映射到html标签
- 具备自适应输出
- 采用对象模型
- 具有可扩展性
- 事件处理模型在服务器, 而html服务器控件处理在客户端
>控件类型
- 数据显示
label, literal
- 数据输入
textBox, checkBox, checkBoxList, radioButton, radioButtonList
- 数据提交
button, imagebutton, linkbutton
- 图像控件
image, imageMap(类似于hotspot)
- 文件上传
fileUpload
- 其他
calendar, hyperlink, panel, hiddenfield, adrotator(广告)
:asp.net验证控件
>requiredFieldValidator, rangeValidator, compareValidator, regularExpressionValidator, cunstomValidator, validationSummary
>验证流
- 客户端验证后发到服务器端进行验证
<form id="form_login">
<asp:textBox id="name" text="名字" runat="server"/>
<asp:requiredFieldValidator id="requiredFieldV" text="文本不能为空" runat="server" display="static" initialValue="请输入文本"/>
<asp:button id="submit" runat="server" text="确定"/>
</form>
>开发自己的验证控件, 继承自baseValidator
>引用自定义服务器控件方法
- 使用@register指令在asp.net页面中
<% @register tagPrefix="cm" namespace="my_server_controls" assembly="version" %>
<% @register tagPrefix="cm" src="~\controls\*.ascx" %>
其中'~'表示引用程序根目录
- 使用web.config文件
<pages>
<controls>
<add tagPrefix="cm" namespace="web_service_control_namespace" assembly="version" />
</controls>
</pages>
- 使用vs工具箱, 选择chooseitems
>验证组, 只要将validatecontrol的validationGroup设置为同一名称即可. 非本组验证不会相互影响
:asp.net用户控件
>用户控件扩展名 *.ascx, 文件起始命令使用@control指令 特点
无@page命令, 不能独立运行, 没有<html>, <head>, <body>, <form>元素
>web页面转化为用户控件
- 修改扩展名
- 将@page改为@control
- @control指令中包含className属性
- web页面中移除<html>, <head>, <body>, <form>
>添加用户控件, 使用vs编辑器, 使用编程模式
page.controls.add(controlObj);
>clientIdMode属性
asp.net控件中的id并非客户机浏览器中的html元素的id, 其中为了保持唯一性进行了修改, 规则为命名空间_容器0_容器1_..._控件名
模式
inherit, 与父控件模式相同
autoId, 使用asp.net3.5一样的算法生成客户端id
static, 与客户端一致, 不改变任何id
predictable, 使用父控件ID_子控件ID格式
:asp.net数据访问
>ado.net, 作为.netframework的一部分, 支持和sql server, orcale, ole, odbc
>核心对象
connection, command, dataReader, dataAdapter
>ado.net命名空间
system.data, system.dataCommon基本的抽象类实现了system.data中的相关接口并定义额ado.net的核心功能,system.data.oledb, system.data.odbc, system.data.oracleClient, system.data.sqlClient, system.data.sqlTypes
>connection类
- 连接字符串, 服务器地址, 数据库名, 如何通过数据验证
- 各种数据提供程序的windows身份验证语法
sqlClient, inegrated security=true;或者integrated security=SSPI;
oledb, integrated security=SSPI;
odbc, trusted_connection=yes;
oracleClient, integrated security=yes;
- sqlClient链接字符串
集成windows身份验证
"persist security info=false;integrated security=true;initial catalog=aspnet4;datasource=localhost"
采用sql server身份验证
"initial catalog=aspnet4; datasource=localhost;user id=sa;password=***;"
"database=aspnet4;server=(local) user id=sa;password=***;"
>可以使用web配置文件存放链接字符串
>使用数据库链接的原则是晩打开早释放
>连接池, connection pool, asp.net默认提供连接池, 如果需要关闭可以再web配置文件中加入"polling=false"
ole db connection中使用"ole db services=-4"来关闭连接池
>可以使用sql server的性能查看器来最终系统日志情况
>连接池中的链接, 工作方式为
- 如果有未使用链接, 则返回链接
- 如果池中链接都已用完, 创建一个新链接
- 如果池中链接已经达到最大值, 请求进入等待队列, 直到有空闲链接可用
- 参数
min pool size, max pool size, connection lifetime当前总链接时间的最大值, connection timeout误操作的链接最大时间
>dataAdapter的Fill和update方法会自动打开和关闭链接
>data reader建立的时候要使用commandBehavior.closeConnection作为ExecuteReader参数
>command类, 可以执行任何sql语句和存储过程
- 属性
commandText, commandTimeout, commmandType, connection, parameters
- commandType枚举
commandType.text, commandType.storedProcedure, commandType.tableDirect为了兼容ole db驱动保留查询表中所有记录
- command常用方法
ExecuteNonQuery, 执行非select语句, 如insert或存储过程
ExecuteReader, 执行select语句
ExecuteScalar, 执行select语句但只返回一行, 可用于执行统计语句
- ex.
string = sql_query = "select * from table_name where id = @var_name";
SqlConnection cn = new SqlConnection(connection_string);
SqlCommand cmd = new SqlCommand(sql_query, cn);
cmd.Parameters.AddWithValue("@var_name", value);
>可以再global.asx文件中建立处理防止sql注入攻击的类
>事务, transaction, 是一种机制, 一种操作序列
- 特点
原子性(atomic), 一致性(consist), 隔离性(isolated), 持久性(durable)
- 建议
尽量短,简单, 提高效率; 避免影响大批记录的更新, 尽量使用数据库事务来处理任务, 尽量避免在事务中使用select语句返回数据, 除非语句依赖于返回数据;
- .net事务类型划分
本地, 分布式包含手动和自动两种
- 存储过程事务
begin transaction, commit transaction, rollback transaction
ex. tsql
begin try
begin transaction
update ...
commit
end try
begin catch
if(...)
rollback
end catch
>sql server中的隔离级别
read uncommitted < read committed < repeatable read < serializable
read uncommitted, 可能出现脏读
read committed, 允许不可重复读取, 但不允许脏读
repeatable read, 不允许不可重复图取和脏读, 但可能出现幻影数据(读取新插入的数据)
serializable, 完全串行化处理
>sql server 保存点
sqlTransactoin sqlTran = connectionObject.beginTransaction();
sqlTran.save("save_point_name");
sql.Tran.rollback("save_point_name");
sql.Tran.complete();
需要引用System.transactions类
>事务设置, 在transaction对象的transactionOptions属性中可以设置事务隔离级别, 有三种
required, 需要事务, 没有创建, 如果环境中已经有事务则使用环境中
requiresNew, 一致创建新的
suppress, 在该范围内的代码不受事务控制也就是无论是否回滚都会执行
>事务的嵌套, 使用transactionScopeOptions
>分布式事务登记, EnlistTransaction方法
>COM+事务, .net framework就是依靠MTS/COM+服务来支持和自动事务处理的.
- 要实现COM+的类必须继承自System.EnterpriseServices.ServicedComponent类, 例如web service就是集成该类, 并且加上特性transaction属性
[Transaction(TransactionOption.Required)]
class CustomComClass:ServicedComponent
{
}
- 要为程序集添加强名, 使用.net framework的sn.exe工具
sn -k c:\mykey.snk
生成自己的数字签名
- 在项目属性中添加生成的数字签名, 在signning页中
- 优缺点, COM+是企业级, 可以执行分布式事务, 多个对象可以轻松运行在同一事务中, 可以自动登记, 获得COM+服务, 可以使用对象构建和对象池. 但要注意对性能的额外消耗, 而且企业级服务总是线程安全的也就是一个事务只能有一个线程
>非连接的数据概述, 包括
connection, command, datareader, dataAdapter
数据对象核心是dataset, 由dataRelation, dataTable构成, dataTable包含dataRow, dataColumn, constraint, defaultView, dataRelation父子关系
- datatable除了可以操作行列外还可以读写xml文件
- dataAdapter, 用作内存数据表和数据源之间的桥接, fill可以填充dataset或datatable, update来调用对应的insert, update, delete语句
- ex.
DataTable dt = new DataTAble();
SqlDataAdapter ad = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("Select * from table");
ad.SelectCommand = cmd;
cmd.Parameter.Add("@varName", SqlDbType.type, value);
using(connectionObj)
{ ad.Fill(dt); }
>DataView, 用于参看dataTable
:数据空间绑定与操作
>List数据控件
DropDownList, RadioButtonList, ListBox, CheckBoxList, BulletedList
- 绑定数据
List<ListData> list = new List<ListData>();
list.Add(new ListData(0, "man"));
dropDownListObj.DataSource = list;
dropDownListObj.bind();
>DetailsView用于深入查看数据
>FormView, 类似于DetailView, 具有页眉页脚等模版, 用于编辑修改记录
>Repeater控件, 可以从儿女和数据中创建自定义列表, 该控件不具备呈现功能, 必须通过创建模版为Repeater控件提供布局
>ListView
>DataPager, 用于数据分页, 可以位于ListView中, 也可位于LayoutTemplate模版内部, 要设置PagedControlId来与对应ListView建立联系
>chart控件, mschart支持各种图形, 属性
annotations, 是一个队图形的一些注解对象的集合
borderSkin, 画布的边框风格
chartAreas, 图表的绘图区
legends, 图例的集合
series, 图标序列
titles, 图标的标题
>第三方控件, dundas chart. http://www.dundas.com/
:GridView
>使用于显示数据的网络控件, 可以使用模版和格式化数据
>自带数据分页功能
>支持数据排序
>可以创建空表头使用
<EmptyDataTemplate>...</EmptyDataTemplate>
>可以编辑数据
>支持选择行
>支持导出excel, word, txt与html等
:LINQ查询
>使用LINQ查询数据库, 先要建立LINQ to sql类
var ret = from table in db
where expression
select column_name;
>基本语句
from, where, select, orderby, group, into, join, let(生成临时表),
>LINQ常用操作, 要求序列实现IEnumerable<T>和IQueryable<T>接口
例如, first, firstOrDefault, selectMany将集合映射到新序列中等, 包括了操作类型有
- 筛选, where
- 投影, select, selectMany
- 排序, orderBy
- 聚合, count, min, max
- 集合操作, distinct, group, except, union合并
- 元素操作, elementAt, first
- 数据类型转换, AsEnumerable, cast, ToList
- 链接操作, join, groupJoin
- 限定符, All, any
- sequenceEqual, 判断序列是否相等
- contact, 实现序列串联
- skip, skpWhile跳过指定的元素后生成新序列
- take, takeWhile
:LINQ to ADO.net
>linq to sql是将模型语言转换为sql语句
>dataContext, 上下文, 为linq to sql 提供数据库操作入口
- 属性
connection, transaction, commandTimeout, changeConflicts冲突对象集合, deferredLoadingEnable延迟加载, loadOptions数据导入选项属性
- 方法
submitChanges(), databaseExists(), createDatabase(), deleteDatabase, ExecuteCommand()返回整数, ExcuteQuery()返回IEnumerable<TResult>对象, GetCommand获取指定LINQ查询指令的sql语句
>引入system.data.linq.mapping
>延迟执行, 默认采用, 对于关联对象访问时才查询
>自动生成数据类, *.dbml, 可以从vs创建数据库,也可从数据库映射为dbml文件
>使用存储过程, 使用dbml设计器可以方便的映射存储过程供c#代码使用
>linq to dataset, 是对离线数据库的支持
>queryExtender控件, 是asp.net 4 新增加的一个数据筛选控件为从数据源检索的数据创建筛选器, 依赖于linq, 无需了解linq即可使用, 为不懂linq的程序员设计
:xml与linq to xml
>xml概述
声明, 元素, 节点, 属性
>基于流的xml处理
xmlTextWriter与xmlTextReader类来直接处理xml文件
>基于内存的XmlDocument, 继承自XmlNode抽象类, 是xml的dom模型, 可以从stream对象中载入xml文件
>使用XmlElement类来操作xml
>使用xpath搜索xmlDocument, 基本语法
/, 结尾搜索子节点, /在开头表示创建绝对路径
//, 搜索节点的所有嵌套, 开头表示相对路径
@, 节点的某个属性
*, 路径中任意元素
|, 组合多个路径
., 当前节点
.., 父节点
starts-with, 指定包含什么样的开头字符, ex. /mybook/book[starts-with(press,'人')]
position, 基于位置获取节点元素
count, 统计匹配名称的节点元素个数
>XpathNavigator, 抽象类, 定位和编辑xml信息项的游标模型
>验证xml
xmlReadSetting对象的schema属性, 使用自定义的xsl文件检查xml文档
>linq to xml, 导入system.xml.linq, 包含
Extensions, XDocument, XAttribute, XCdata等操作xml的对象
XDocument可以直接创建xml对象, 并使用linq进行查询
:ado.net实体框架
>entity framework直接创建数据库与c#代码的映射
:asp.net站点
>样式与布局
>css
- 框模型, box model是css的基石, 页面上每个元素都看成一个方框, 由
content|element内容, padding内边距, border边框, margin外边距组成
最里面是内容, 外面是内边距, 内边距呈现元素背景, 外面是边框, 之后是外边距, 外边距默认是透明的, 因此不会遮挡任何元素. 所有边距是可选的, 默认值是0
- 边距赋值规则
四个数值, 顺序为 top right botton left 即顺时针方向
top right botton [left = right]
top right [botton=top] [left=right]
top [right=top] [botton=top] [left=top]
- 定位
绝对定位, absolute
相对定位, relative
浮动, float, 不占流位置
固定, fixed, IE6.0不支持
- clear, 用于重新开始流排列不允许浮动, 清除之前的定位设置
none, left, right, both, inhert, 几种属性
:asp.net母版页
>名称, *.master, 与普通页的区别
- 母版页以@Master开头, 而非web页的@page
- 母版页可以使用contentPlaceHolder控件, 其他页不允许
>使用, web页引用母版页后要设置母版页contentPlaceHolder的填充元素
<asp:content id="content_0" contentPlaceHolderId="referenceMasterPageHolderId" runat="server">
...
</asp:content>
>母版可以引用母版
>注意相对路径的处理, 在所有具有runat="server"属性的控件中asp.net会自动处理相对路径. 对于没有使用的要注意处理资源定位, '~'代表asp.net应用程序的根目录, 可以全部使用'~/.../...'形式行为, 避免定位出错
>母版页与内容页传递数据, page.master属性来引用母版页对象, 寻找元素使用masterObj.FindControl()
:主题和皮肤
>asp.net可以创建主题文件夹, 主题分为两类
- 用asp.net标签定义样式, 这个时候标签内无id值, 成为皮肤文件, *.skin
<asp:button backColor="blue" borderColor="#efe6af">
<all the button supported styple/>
...
</asp:button>
在一个skin文件中可以定义多个skinId, 即每个控件具有属性skinId, 可以定义多个样式, 不同的样式设置不同的skinId
- 用css
>使用, 直接在page命令中引用主题
<%page ... theme="themeFolderName"%>
>说明, 默认使用主题定义的样式, 每个空间中可以指定禁用服务器主题
:站点导航
>multiView控件, 可以包含多个view, 具有下一步
>wizard控件更加专业的向导
>站点地图, siteMap, 是web.sitemap文件, 是xml格式的, 需要手动编写. 只有sitemap和siteMapNode两种标签
<?xml ..>
<sitemap xmlns="url" >
<siteMapNode url="" title="" description="">
...
</siteMapNode>
</sitemap>
>使用, sitemapDataSource控件自动读取sitemap文件, 之后可以绑定到指定的显示控件, 例如treeview等
>siteMapPath控件, 站点导航控件, 实现 主页>次级>次级的显示, 可以单独使用, 基于sitemap文件
- 可以自定义样式和模版
- 可以限制父级链接数量, 属性parentLevelsDisplayed
>站点地图可以和使用数据管理来提供不同的访问限制, 也可指定属性roles确定用户角色
>treeView控件
>menu控件
:asp.net高级话题
>客户端状态管理
>服务器状态管理
- response对象, 服务器写回
- request对象, 具有cookes属性等与客户端发来请求相关的所有数据
- server对象, 提供了多种用于处理web请求的辅助方法
- cookie操作cookie
- session, 回话状态
- viewStateMode视图模式
- asp.net路由route对象, 影射到处理的url的格式
:自定义服务器控件
>需要从system.web.ui.control派生, 具有更多自由度
>重写render方法来管理控件的显示或相关内容的显示
>事件处理, IPostBackDataHandler, change事件
:asp.net缓存
>使用@outputCache来声明缓存方式的设置
>在web.config中配置
>客户以使用部分页缓存
>检查缓存的有效性
>system.web.caching命名空间
>分布式缓存, velocity, 提供了基于windows power shell的工具
:多语言本地化应用
>全局资源文件
*.resx
*.language.resx
*.language.region.resx
>page.uiculture, page.culture属性来配置
>cultureInfo类是system.globalization命名空间非常重要的类, 为每个区域指定一个名称
:asp.net的web部件
>三要素
ui, 个性化设置, 实际的web控件
>常用的web部件, webPartManager, webPartZone
>使用aspnet_regsql.exe工具安装sql server 提供程序使用的sql server数据库
>web部件以不同的方式显示
- 浏览模式, browserDisplayMode
- 设计模式, DesignDisplayMode
- 编辑模式, EditDisplayMode
>自定义谓词, 是对web部件可执行的操作
>web部件可以导入导出