《精通ASP.NET4.5 第5版》PDF下载

  • 购买积分:26 如何计算积分?
  • 作  者:(美)弗瑞曼,(美)麦克唐纳,(美)苏帕斯塔著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2014
  • ISBN:9787115364111
  • 页数:1008 页
图书介绍:本书是ASP.NET 领域的鸿篇巨制,全面讲解了ASP.NET 4 的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。本书还深入讲述了其他ASP.NET 图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。

第一部分 入门 2

第1章 第一个ASP.NET应用程序 2

1.1 准备工作站 2

1.2 创建新的ASP.NET项目 3

1.2.1 添加新的Web窗体 4

1.2.2 测试示例应用程序 5

1.3 创建简单的应用程序 8

1.3.1 设定场景 8

1.3.2 创建数据模型和存储库 8

1.3.3 创建窗体并设置其样式 9

1.3.4 处理窗体 12

1.4 创建摘要视图 16

1.4.1 设置动态HTML的格式 18

1.4.2 测试动态代码 18

1.4.3 调用代码隐藏方法 18

1.5 执行验证 21

1.6 总结 24

第2章 ASP.NET背景信息 25

2.1 ASP.NETFramework概述 25

2.2 关于本书 27

2.2.1 所需了解的信息 27

2.2.2 如果没有相关经验该怎么办 27

2.2.3 需要使用哪些软件和技术 28

2.2.4 本书是否包含大量示例 28

2.3 本书的结构 28

2.4 了解Web窗体 29

2.4.1 Web窗体的优势 30

2.4.2 了解Web窗体的劣势 31

2.5 总结 32

第3章 C#基本功能 33

3.1 创建示例项目 33

3.2 使用自动实现的属性 34

3.3 使用对象和集合初始化器 37

3.4 使用扩展方法 39

3.4.1 将扩展方法应用于接口 41

3.4.2 创建过滤式扩展方法 43

3.5 使用lambda表达式 45

3.6 使用自动类型推断 48

3.7 使用匿名类型 48

3.8 使用泛型类型 50

3.8.1 使用通用基类 52

3.8.2 使用泛型类型 54

3.9 显式实现接口 56

3.10 执行语言集成查询 58

3.11 使用异步方法 62

3.12 总结 65

第4章 使用jQuery 66

4.1 创建示例项目 66

4.1.1 在示例项目中添加jQuery 68

4.1.2 在Web窗体中添加jQuery 69

4.2 jQuery入门 70

4.2.1 等待DOM 70

4.2.2 jQuery语句 71

4.3 选择元素 72

4.3.1 按类型、类或ID选择元素 72

4.3.2 使用关系和联合选择元素 73

4.3.3 使用特性选择元素 74

4.3.4 使用过滤器选择元素 75

4.3.5 使用jQuery函数 77

4.4 使用jQuery事件 81

4.5 处理JSON数据 83

4.6 总结 85

第5章 基本开发工具 86

5.1 创建示例项目 86

5.2 使用Visual Studio调试器 88

5.2.1 创建条件断点 89

5.2.2 了解应用程序状态 90

5.2.3 使用Immediate Window 91

5.3 使用Page Inspector和浏览器F12工具 92

5.3.1 使用JavaScript Console 93

5.3.2 使用网络监视器 94

5.3.3 使用JavaScript Profiler 95

5.4 使用NuGet 96

5.5 使用Opera Mobile 98

5.6 使用JavaScript库 98

5.6.1 jQuery、jQuery UI和jQuery Mobile 99

5.6.2 Knockout 99

5.6.3 Modernizr 99

5.6.4 requireJS 99

5.7 总结 99

第6章 SportsStore:真实的应用程序 100

6.1 创建项目 100

6.1.1 创建文件夹结构 100

6.1.2 添加全局应用程序类 102

6.1.3 创建数据库 103

6.1.4 定义数据库架构 105

6.1.5 向数据库中添加数据 106

6.2 创建数据模型和存储库 107

6.2.1 创建数据模型类 108

6.2.2 添加Entity Framework 108

6.2.3 创建Entity Framework上下文 109

6.2.4 创建产品存储库 110

6.3 创建产品清单 111

6.4 添加分页 113

6.4.1 显示产品页 113

6.4.2 添加分页链接 116

6.5 设置列表Web窗体的样式 117

6.5.1 创建母版页 118

6.5.2 自定义母版页 119

6.5.3 应用母版页 120

6.5.4 测试母版页 121

6.6 总结 121

第7章 SportsStore:导航和购物篮 122

7.1 配置URL路由 122

7.1.1 创建路由配置类 123

7.1.2 更新全局应用程序类 124

7.1.3 使用路由变量 125

7.1.4 测试路由配置 126

7.1.5 生成路由链接 127

7.2 添加类别信息 128

7.2.1 创建用户控件 128

7.2.2 将用户控件应用于母版页 130

7.2.3 添加CSS样式 131

7.2.4 扩展URL方案 131

7.2.5 添加显示类别功能 132

7.2.6 突出显示当前类别 134

7.3 构建购物篮 135

7.3.1 定义Cart类 136

7.3.2 添加购物篮按钮 137

7.3.3 创建会话帮助程序 140

7.3.4 处理窗体发布 142

7.3.5 显示购物篮的内容 144

7.3.6 测试购物篮 146

7.4 总结 147

第8章 SportsStore:完善购物篮 148

8.1 移除不需要的购物篮产品 148

8.1.1 了解视图状态 150

8.1.2 禁用视图状态 151

8.2 添加购物篮摘要 152

8.2.1 定义CSS样式 153

8.2.2 应用购物篮摘要控件 154

8.2.3 合并用户控件声明 155

8.3 提交订单 156

8.3.1 扩展数据库和数据模型 156

8.3.2 添加Checkout链接和URL 159

8.3.3 处理订单 162

8.4 添加验证 165

8.4.1 添加NuGet程序包 167

8.4.2 创建并使用脚本捆绑包 168

8.4.3 设置客户端验证 170

8.4.4 创建服务器控件 171

8.4.5 应用服务器控件 173

8.5 总结 175

第9章 SportsStore:管理 176

9.1 添加常用构建块 176

9.1.1 扩展路由配置 176

9.1.2 添加管理母版页 177

9.1.3 添加CSS样式表 178

9.1.4 添加Web窗体 179

9.2 添加订单管理 180

9.2.1 清空和填充数据库 180

9.2.2 添加Web窗体内容 181

9.2.3 创建代码隐藏类 184

9.3 添加类别管理 186

9.3.1 扩展存储库 186

9.3.2 添加Web窗体 187

9.3.3 设置CRUD方法 189

9.3.4 测试类别管理 190

9.4 设置授权 191

9.4.1 确保管理页面的安全 191

9.4.2 创建身份验证登录Web窗体 192

9.4.3 测试失败的身份验证 194

9.4.4 测试成功的身份验证和授权 194

9.5 总结 195

第10章 SportsStore:部署 196

10.1 为最终测试禁用调试模式 196

10.2 准备Windows Azure 197

10.2.1 创建网站和数据库 198

10.2.2 准备数据库以进行远程管理 200

10.2.3 创建架构 200

10.3 部署应用程序 203

10.4 总结 207

第11章 可测试的Web应用程序 208

11.1 了解问题所在 208

11.2 了解解决方案 209

11.3 创建示例项目 211

11.3.1 设置静态内容 211

11.3.2 设置数据模型 212

11.3.3 实现存储库 213

11.3.4 添加基础架构 214

11.4 实现RSVP页面 216

11.4.1 创建表示器 216

11.4.2 创建视图 217

11.4.3 测试RSVP页面 219

11.5 添加单元测试 220

11.5.1 创建单元测试项目 220

11.5.2 创建单元测试 222

11.5.3 测试输入值 224

11.6 添加依赖注入 229

11.6.1 添加NuGet程序包 230

11.6.2 配置注入 231

11.7 完成整个应用程序 233

11.7.1 创建表示器 234

11.7.2 配置依赖注入 235

11.8 总结 236

第二部分 核心ASP.NET平台 238

第12章 使用Web窗体 238

12.1 创建示例项目 238

12.2 了解Web窗体文件 239

12.2.1 使用代码片段 240

12.2.2 了解可编程HTML元素 249

12.2.3 了解控件 250

12.3 了解代码隐藏类 251

12.4 了解Web窗体的工作机制 253

12.4.1 处理可编程HTML元素 254

12.4.2 编译Web窗体 255

12.5 使用母版页 257

12.5.1 配置母版页 258

12.5.2 了解母版页占位符 259

12.5.3 应用母版页 260

12.5.4 使用母版页代码隐藏类 261

12.5.5 嵌套母版页 263

12.6 总结 265

第13章 生命周期和上下文 266

13.1 创建示例项目 266

13.2 了解应用程序生命周期 270

13.3 了解请求生命周期 273

13.3.1 了解模块和处理程序 274

13.3.2 处理请求生命周期事件 276

13.3.3 在一个方法中处理多个事件 278

13.4 了解上下文对象 281

13.4.1 使用HttpContext对象 281

13.4.2 使用HttpApplication对象 282

13.4.3 使用HttpRequest对象 286

13.4.4 使用HttpResponse对象 288

13.5 进行组合 290

13.5.1 对请求计时 291

13.5.2 限制访问 292

13.5.3 记录请求信息 293

13.6 总结 293

第14章 模块 294

14.1 准备示例应用程序 294

14.2 了解模块 296

14.2.1 创建模块 296

14.2.2 注册模块 297

14.3 创建模块项目 298

14.3.1 创建Visual Studio项目 298

14.3.2 创建模块 299

14.3.3 注册模块 301

14.4 使用模块事件 302

14.4.1 定义模块事件 302

14.4.2 处理模块事件 303

14.4.3 按名称查找模块 306

14.5 使用内置模块 309

14.6 进行组合 313

14.7 总结 315

第15章 处理程序 316

15.1 准备示例应用程序 316

15.2 了解处理程序 317

15.3 处理程序和请求生命周期 318

15.4 创建一般处理程序 320

15.4.1 实现自定义行为 321

15.4.2 测试一般处理程序 322

15.5 创建自定义处理程序 324

15.5.1 创建自定义处理程序 324

15.5.2 注册自定义处理程序 325

15.6 创建自定义处理程序工厂 326

15.6.1 控制处理程序实例化 327

15.6.2 动态选择处理程序 329

15.6.3 重复使用处理程序 330

15.7 协调模块与处理程序 333

15.7.1 使用Items集合 334

15.7.2 使用声明式接口 337

15.8 进行组合 338

15.8.1 查找适当的内置处理程序工厂 339

15.8.2 扩展基类 340

15.8.3 编写处理程序 341

15.8.4 注册处理程序工厂 341

15.8.5 测试处理程序工厂 342

15.9 总结 343

第16章 页面和控件生命周期事件 344

16.1 准备示例应用程序 344

16.2 了解Page类 345

16.3 了解页面生命周期 349

16.4 处理控件事件 351

16.4.1 创建一个简单的控件 352

16.4.2 注册并应用控件 353

16.5 接收控件事件 355

16.6 了解端到端Web生命周期 359

16.7 页面上下文 360

16.7.1 访问上下文对象 361

16.7.2 设置Page指令值 361

16.7.3 提供特定于Web窗体的信息 362

16.8 进行组合 363

16.9 总结 365

第17章 管理请求执行过程 366

17.1 准备示例应用程序 366

17.2 使用URL重定向 368

17.2.1 执行URL重定向 369

17.2.2 手动执行重定向 371

17.3 管理处理程序选择和执行过程 372

17.3.1 预先选择处理程序 373

17.3.2 传输请求 374

17.3.3 通过显式执行处理程序生成响应 377

17.4 进行组合 378

17.4.1 创建用于查看源代码的处理程序 378

17.4.2 使用HTTP重定向 380

17.4.3 预先选择处理程序 381

17.4.4 执行多个处理程序 383

17.5 总结 387

第18章 管理状态数据 388

18.1 创建示例应用程序 388

18.2 了解状态数据 389

18.3 存储应用程序数据 390

18.4 存储用户数据 392

18.4.1 创建配置文件数据库 392

18.4.2 配置数据库连接 394

18.4.3 配置配置文件和配置文件属性 395

18.4.4 定义配置文件提供程序 396

18.4.5 定义配置文件属性 397

18.4.6 使用配置文件数据 398

18.5 存储会话数据 401

18.5.1 使用会话数据 401

18.5.2 配置会话数据 404

18.5.3 使用状态服务器 406

18.5.4 使用SQL数据库 407

18.6 使用视图数据 410

18.7 使用cookie 413

18.8 进行整合 414

18.8.1 创建模块 415

18.8.2 创建Web窗体 416

18.9 总结 419

第19章 缓存 420

19.1 准备示例应用程序 420

19.2 使用应用程序缓存 423

19.3 管理数据项缓存 424

19.4 使用依赖项缓存数据 426

19.4.1 使用内部依赖项缓存数据 428

19.4.2 创建自定义依赖项 429

19.4.3 使用聚合依赖项缓存数据 432

19.4.4 缓存具有过期约束条件的数据 433

19.4.5 使用清理优先级缓存数据 434

19.5 接收缓存通知 436

19.5.1 接收清除缓存通知 436

19.5.2 使用通知避免清除缓存 438

19.6 配置缓存 440

19.7 进行组合 441

19.8 总结 443

第20章 缓存输出 444

20.1 准备示例应用程序 444

20.2 缓存Web窗体输出 446

20.2.1 控制端到端缓存 447

20.2.2 缓存多个内容副本 448

20.2.3 创建缓存配置文件 451

20.3 选择性地更新内容 452

20.4 缓存用户控件输出 455

20.5 缓存服务器控件输出 459

20.6 创建缓存依赖项 460

20.7 使用自定义输出缓存 461

20.7.1 创建自定义缓存实现 462

20.7.2 注册自定义输出缓存实现 463

20.7.3 动态选择输出缓存实现 465

20.8 配置输出缓存 466

20.9 进行组合 467

20.9.1 创建处理程序工厂类 468

20.9.2 注册处理程序工厂 472

20.10 总结 473

第21章 处理错误 474

21.1 准备示例项目 474

21.2 了解错误 477

21.3 自定义默认行为 478

21.3.1 提供全包容性的错误页面 479

21.3.2 处理特定HTTP错误 483

21.3.3 指定特定于Web窗体的错误页面 489

21.4 控制错误处理过程 490

21.4.1 在Web窗体中处理错误 490

21.4.2 在应用程序级别处理错误 492

21.5 处理多个错误 495

21.5.1 报告错误 496

21.5.2 显示错误 496

21.5.3 拦截错误 497

21.6 进行组合 499

21.6.1 删除现有错误处理代码 499

21.6.2 定义模块 499

21.7 总结 501

第22章 管理路径 502

22.1 准备示例项目 502

22.1.1 创建模块 502

22.1.2 创建附加内容 504

22.2 使用路径 504

22.2.1 获取路径信息 505

22.2.2 操纵路径 508

22.3 管理虚拟路径 509

22.3.1 设置默认文档 510

22.3.2 处理针对无扩展名URL的请求 511

22.3.3 重写路径 513

22.4 使用友好URL程序包 515

22.4.1 禁用之前的示例 515

22.4.2 安装和配置NuGet程序包 516

22.4.3 使用FriendlyUrls库功能 517

22.5 进行组合 520

22.5.1 编写文件 520

22.5.2 重写路径 521

22.6 总结 524

第23章 URL路由 525

23.1 准备示例项目 525

23.2 为路由准备应用程序 526

23.3 使用固定路由 528

23.4 添加变量段 532

23.4.1 处理范围过大的路由 533

23.4.2 创建可删节URL 534

23.4.3 创建长度可变的段 540

23.5 路由段值模型绑定 542

23.6 生成传出URL 544

23.7 进行组合 546

23.7.1 生成诊断HTML 547

23.7.2 测试URL匹配 551

23.8 总结 551

第24章 高级URL路由 552

24.1 准备示例项目 552

24.2 使用高级约束条件 553

24.2.1 通过HTTP方法限制路由 553

24.2.2 创建自定义路由限制 555

24.3 路由文件请求 557

24.4 使用路由处理程序 560

24.4.1 阻止请求路由 560

24.4.2 创建自定义路由处理程序 564

24.5 创建自定义RouteBase实现 566

24.6 进行组合 569

24.6.1 禁用ASPX请求 569

24.6.2 路由到其他文件类型 571

24.6.3 让ASP.NET为传出URL选择路由 574

24.7 总结 577

第25章 身份验证和授权 578

25.1 准备示例项目 578

25.2 了解窗体身份验证 579

25.3 配置ASP.NET身份验证 581

25.4 执行身份验证 582

25.4.1 验证用户身份 584

25.4.2 获取身份验证信息 586

25.5 执行授权 587

25.5.1 了解授权和身份验证集成 587

25.5.2 创建授权策略 589

25.5.3 创建特定于位置的授权策略 593

25.6 避开授权 595

25.7 授权已路由的URL 597

25.8 进行组合 599

25.8.1 重建身份验证Web窗体 599

25.8.2 添加母版页 601

25.8.3 测试修订后的身份验证和授权 603

25.9 总结 603

第26章 成员资格 604

26.1 准备示例项目 604

26.2 在应用程序中添加成员资格 605

26.2.1 安装通用提供程序 605

26.2.2 为成员资格配置应用程序 606

26.2.3 创建用户和角色 610

26.2.4 使用成员资格执行身份验证 611

26.3 使用成员资格 612

26.3.1 执行密码更改 613

26.3.2 执行密码恢复 616

26.3.3 执行注册 621

26.4 进行组合 625

26.5 总结 627

第27章 ASP.NET配置 628

27.1 准备示例项目 628

27.2 了解配置层次结构 629

27.3 以编程方式获取配置信息 630

27.3.1 使用应用程序设置 631

27.3.2 处理连接字符串 634

27.3.3 使用配置节 638

27.3.4 处理整个配置 641

27.4 创建自定义配置节和组 644

27.4.1 创建简单的配置节 644

27.4.2 创建集合配置节 648

27.4.3 创建配置节组 652

27.5 使用外部配置文件 654

27.6 锁定配置节 655

27.7 进行组合 658

27.8 总结 659

第28章 异步请求处理 660

28.1 准备示例项目 660

28.2 了解问题所在 662

28.3 创建异步Web窗体 663

28.3.1 使用异步方法 665

28.3.2 创建和注册异步页面任务 666

28.3.3 执行多个任务 666

28.4 创建异步模块 669

28.5 创建异步处理程序 671

28.6 总结 672

第三部分 窗体和控件 674

第29章 使用控件 674

29.1 准备示例项目 674

29.2 了解控件 675

29.2.1 了解基本的控件类 676

29.2.2 使用控件以编程方式访问HTML元素 676

29.2.3 使用自定义控件生成HTML片段 678

29.2.4 使用自定义服务器控件 682

29.2.5 使用控件显示数据 685

29.2.6 使用控件模拟桌面开发 688

29.3 利用控件层次结构 691

29.3.1 在控件层次结构中导航 691

29.3.2 在层次结构中查找控件并操纵控件 693

29.3.3 以编程方式添加控件 696

29.4 进行组合 698

29.5 总结 701

第30章 窗体和请求验证 702

30.1 准备示例项目 702

30.2 了解服务器端form元素 703

30.3 检测窗体发布和回传 706

30.3.1 在查询字符串中查找窗体数据 708

30.3.2 检查POST请求 708

30.4 处理窗体数据 709

30.5 了解“一窗体”限制 712

30.6 了解请求验证 715

30.6.1 使用预先请求验证 717

30.6.2 使用延迟请求验证 718

30.6.3 使用未经验证的窗体数据 719

30.6.4 在控件中验证请求 722

30.7 进行组合 723

30.8 总结 725

第31章 创建自定义控件 726

31.1 准备示例项目 726

31.2 创建基本的控件 728

31.2.1 了解Control指令 728

31.2.2 注册和应用控件 729

31.2.3 在Web.config文件中注册控件 730

31.3 在控件中添加功能 732

31.4 了解控件ID 733

31.4.1 标识控件生成的HTML元素 734

31.4.2 标识控件层次结构内的控件 735

31.5 定义元素特性 736

31.5.1 创建枚举特性 738

31.5.2 创建集合特性 739

31.6 创建服务器控件 742

31.6.1 注册服务器控件 744

31.6.2 使用HtmlTextWriter类 746

31.7 进行组合 748

31.8 总结 749

第32章 有状态控件 750

32.1 准备示例项目 750

32.2 了解无状态性和控件生命周期 752

32.2.1 使用会话状态 753

32.2.2 通过窗体元素添加状态 754

32.2.3 使用视图状态 756

32.2.4 使用控件状态 759

32.3 管理应用程序视图状态 761

32.3.1 配置应用程序视图状态 764

32.3.2 配置Web窗体和控件视图状态 766

32.3.3 配置控件视图状态 767

32.4 进行组合 769

32.4.1 对input元素使用视图状态 772

32.4.2 在子控件中使用视图状态 775

32.4.3 视图状态数据不断增加 777

32.4.4 混淆视图状态与控件状态 778

32.5 总结 779

第33章 服务器端HTML元素 780

33.1 准备示例项目 780

33.2 了解服务器端元素 780

33.2.1 使用基类功能 781

33.2.2 使用容器元素 783

33.3 使用页面结构元素 785

33.4 处理窗体元素 787

33.4.1 使用input元素 787

33.4.2 使用其他窗体元素 793

33.5 使用HTML表 796

33.5.1 枚举表 796

33.5.2 使用特定表元素 799

33.5.3 以编程方式创建表 800

33.6 使用其他元素 802

33.7 进行组合 802

33.8 总结 804

第34章 模型绑定 805

34.1 准备示例项目 805

34.2 了解问题所在 807

34.3 应用模型绑定 809

34.4 处理模型绑定和验证错误 813

34.5 使用绑定特性 819

34.5.1 应用模型绑定特性 822

34.5.2 对复杂类型应用模型绑定特性 824

34.6 进行组合 825

34.6.1 创建自我验证模型类 825

34.6.2 创建字段级别的错误控件 827

34.7 总结 829

第35章 数据绑定 830

35.1 准备示例项目 830

35.2 了解数据绑定 834

35.2.1 配置数据绑定 834

35.2.2 组合元素和数据控件 837

35.3 编写自定义数据控件 840

35.3.1 管理数据控件视图状态 843

35.3.2 在自定义数据控件中添加模板 844

35.3.3 为模板添加功能 849

35.4 进行组合 851

35.5 总结 854

第36章 基本数据控件 855

36.1 选择数据控件 855

36.2 准备示例项目 856

36.3 使用列表数据控件 856

36.3.1 使用CheckBoxList控件 857

36.3.2 使用DropDownList控件 864

36.3.3 使用ListBox控件 865

36.3.4 使用RadioButtonList控件 868

36.3.5 使用BulletedList控件 869

36.4 使用Repeater控件 871

36.4.1 Repeater的标准用法 871

36.4.2 使用Repeater模板 872

36.4.3 以编程方式创建模板 874

36.5 进行组合 876

36.6 总结 879

第37章 复杂数据控件 880

37.1 准备示例项目 880

37.1.1 准备脚本管理 880

37.1.2 扩展CSS 881

37.2 使用FormView控件 881

37.2.1 定义代码隐藏类 882

37.2.2 定义模板 884

37.2.3 管理外部元素 886

37.2.4 使用FormView控件编辑数据 887

37.2.5 实现数据方法 893

37.2.6 了解FormView事件 895

37.3 使用ListView控件 896

37.3.1 使用ListView的基本功能 897

37.3.2 对数据分页 902

37.3.3 了解ListView事件 904

37.4 进行组合 904

37.5 总结 905

第38章 其他ASP.NET控件 906

38.1 准备示例应用程序 906

38.2 使用富UI控件 906

38.2.1 富UI控件过于抽象 908

38.2.2 富UI控件会修改元素的行为 908

38.2.3 富UI控件依赖于C#事件 909

38.2.4 将直接对富UI控件应用样式 909

38.3 选择富UI控件 910

38.4 使用其他控件 918

38.4.1 使用Literal控件 919

38.4.2 使用PlaceHolder控件 920

38.4.3 使用MultiView控件 922

38.5 进行组合 923

38.6 总结 925

第四部分 客户端开发 928

第39章 管理脚本和样式 928

39.1 准备示例项目 928

39.2 了解脚本管理问题 930

39.2.1 管理JavaScript文件版本 930

39.2.2 管理库依赖关系 931

39.2.3 管理简化 931

39.3 使用捆绑包 932

39.3.1 为捆绑包准备项目 932

39.3.2 创建脚本捆绑包 933

39.3.3 创建样式捆绑包 936

39.4 使用捆绑优化 937

39.4.1 使用本地优化 938

39.4.2 使用内容传送网络 942

39.5 确保库对控件可用 944

39.6 进行组合 946

39.7 总结 948

第40章 Ajax和Web服务 949

40.1 准备示例项目 949

40.2 使用Web API创建Web服务 951

40.2.1 了解目标 951

40.2.2 创建Web API控制器 952

40.2.3 创建路由配置 953

40.2.4 测试Web服务 954

40.2.5 实现控制器方法 957

40.3 应用Web服务 961

40.4 处理事件验证 965

40.4.1 禁用事件验证 967

40.4.2 替换控件 968

40.5 进行组合 969

40.6 总结 971

第41章 客户端验证 972

41.1 准备示例项目 972

41.1.1 安装JavaScript程序包 975

41.1.2 创建验证脚本捆绑包 975

41.2 使用HTML5验证 976

41.3 使用内置验证控件 979

41.4 直接应用验证特性 983

41.5 删除重复的验证策略 986

41.6 进行组合 990

41.6.1 更新Web服务 990

41.6.2 更新模型对象 990

41.6.3 创建JavaScript 991

41.7 总结 992

第42章 针对移动设备 994

42.1 准备示例项目 994

42.2 标识移动设备 996

42.3 切换移动设备的母版页 999

42.4 传送不同的Web窗体 1002

42.4.1 安装和配置程序包 1002

42.4.2 传送自定义内容 1003

42.4.3 允许用户进行选择 1004

42.5 进行组合 1006

42.6 总结 1008