《ASP.NET MVC高效构建Web应用》以目前流行的ASP.NET MVC 5、HTML和Razor为主线,全面系统地介绍ASP.NET MVC Web应用开发的方法,配套提供实例源码、PPT课件与作者一对一QQ答疑服务。
《ASP.NET MVC高效构建Web应用》共13章,内容包括ASP.NET与框架概述、搭建Web开发环境、ASP.NET MVC编程基础、Razor语法基础、HTML辅助器、LINQ的基本使用、数据库快速开发工具Entity Framework、服务端数据注解和验证、模型模板、前端验证、安全与身份验证、音乐唱片管理系统开发实战、一百书店系统开发实战。
《ASP.NET MVC高效构建Web应用》既适合ASP.NET MVC Web应用开发初学者和Web应用开发人员,也适合高等院校或高职高专院校Web应用开发课程的学生。
(1)系统介绍ASP.NET MVC 5 Web应用程序开发的方法,知识点覆盖全面,信息量大,例子丰富,讲解细致,重点突出,适合初学者快速入门。
(2)范例和案例非常完整,尤其是最后两章音乐唱片管理系统和一百书店系统实战案例,完整重现Web应用开发过程,可以用于毕业设计或Web工程师完成项目的开发模板,很有参考价值。
(3)配套全书实例源码、PPT课件与作者一对一QQ答疑服务。
感谢你拿起本书!如果你以前从来没接触过Web开发,但又想轻松学会Web开发,那么本书非常适合你。本书是学习ASP.NET MVC 5的优选之作,融入笔者多年使用MVC框架开发国家专项项目的经验,以及笔者所在Web应用开发团队的智慧。
本书特点
(1)本书内容较新。本书以目前流行的ASP.NET MVC 5、HTML和Razor为主线,选择自带ASP.NET MVC 5模板的VS2019(Visual Studio 2019)和VSCode(Visual Studio Code)作为开发工具,系统、全面地介绍ASP.NET MVC 5 Web应用程序开发的方法。
之所以选择VS2019而不是VS2022或者更高版本的开发工具,是因为VS2019不仅与VS2022功能类似,而且支持的操作系统更广,而VS2022必须在Windows 10或以上平台才能运行,这对于广大的使用Windows 7的开发人员来说是一个不好的消息。另外,笔者也使用过VS2022,感觉就是块头大,速度慢。另外,现在企业界主流开发工具依旧是VS2019,很多需要维护的老项目也是对VS2019的兼容性更好,升级丝滑,而对VS2022的兼容性则一般。
(2)知识点覆盖全面,信息量大,例子丰富,讲解细致,重点突出。全书基本涵盖了ASP.NET MVC的各种编程技术。另外,为了让读者易理解、上手快,笔者在结构组织、知识点的选择以及如何讲解才能循序渐进并突出重点等方面进行了反复推敲、调整、增删、组合,以更好地适合初级ASP.NET MVC Web应用开发人员学习。
(3)范例和案例完整。无论是范例还是案例(统称实例),都是以理论讲解 环境搭建 完整代码及分析 运行截图这种完善的结构进行讲解,充分考虑到读者可能会遇到的各种问题。笔者的讲解细致到打开xxx.cs文件、打开xxx.cshtml文件、在文件开头添加代码这样的程度,让读者学习起来更加轻松,不会看着书就突然产生迷路的感觉,然后只能自己一个一个步骤去实验。尤其是最后一个购物网站的案例不仅实现了常见功能,连用户评论的功能都实现了,几乎可以用作毕业设计或Web工程师完成项目的开发模板,只需要在该案例上改改标题或业务属性即可,因为商业网站的逻辑都差不多,常见的功能都被该案例包括了。
(4)学习曲线平缓。笔者力求将晦涩难懂的技术用通俗易懂的语言表达出来,并配有大量的范例和注释来帮助理解。读者按照本书的顺序学习,不仅入门快,而且效率高。通过阅读、理解、上机练习和调试运行,能很快掌握用ASP.NET MVC 5编写Web应用程序的各种技术。笔者几乎对每个知识点都配套了范例,上机运行调试,并把运行结果截图给读者参考。
(5)配套资料完整。本书提供了书中所有范例和案例的源程序,足足有10GB之多!此外,针对高校老师,还提供PPT教学课件。
配套资源下载与作者答疑服务
本书配套实例源码、PPT课件与作者一对一QQ答疑服务,读者需要使用自己的微信扫描下面二维码获取。如果在阅读本书的过程中发现问题或有任何建议,请联系下载资源中提供的相关电子邮箱或微信号。
适合的读者
本书适合有志于从事ASP.NET Web开发工作的初学者和工程师,尤其适合以前没有接触过Web编程的开发人员。另外,由于本书讲解细致,因此也特别适合用作高等院校或高职高专院校Web应用开发课程的教材。
由于时间仓促,本书难免存在疏漏,欢迎各位读者指评指正。凡是购买本书者,都将享受笔者一对一QQ答疑服务。笔者在图书创作领域耕耘多年,并有志于发挥余热提高中国软件开发水平,因此很乐意帮读者解决看书过程中的疑问。当然,笔者也非常感谢读者能发现书中的问题。总之,希望每位读者能从本书中得到知识和提高技能水平。
笔 者
2025年1月
朱文伟,名校计算机专业统招硕士,20多年C\C 、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《Linux C与C 一线开发实践(第2版)》
《Rust编程与项目实战》《嵌入式Linux驱动开发实践》《高性能Linux网络编程核心技术揭秘》《Linux C/C 服务器开发实践》《Qt 6.x从入门到精通》《PyQt 5从入门到精通》《Linux C与C 一线开发实践》《Visual C 2017从入门到精通》《Windows C/C 加密解密实战》《密码学原理与Java实现》《OpenCV 4.5计算机视觉开发实战(基于VC )》《OpenCV 4.5计算机视觉开发实战:基于Python》。
第 1 章 ASP.NET框架概述 1
1.1 C/S架构和B/S架构 1
1.2 网站开发概述 2
1.2.1 ASP.NET网站的运行原理 2
1.2.2 ASP.NET的服务器 2
1.2.3 网站开发所需技能 3
1.3 ASP.NET概述 3
1.3.1 ASP.NET的概念 4
1.3.2 ASP.NET的优势 4
1.3.3 ASP.NET的主流开发方式 5
1.4 ASP.NET Core概述 5
1.4.1 ASP.NET Core的优点 5
1.4.2 ASP.NET Core和ASP.NET 4.x的比较 6
1.5 C#语言概述 6
1.6 .NET Framework框架 7
1.7 HTTP与HTML 8
1.7.1 TCP/IP通信传输流 8
1.7.2 HTTP 8
1.7.3 HTML 10
1.8 框架 11
1.8.1 为什么要使用框架 11
1.8.2 Web框架基础技术 11
1.8.3 分清框架和库 11
1.8.4 Web开发框架技术 12
1.9 常见Web框架 12
1.9.1 MVC框架模式 12
1.9.2 MVP框架模式 13
1.9.3 MVVM框架模式 14
1.9.4 Web框架的发展现状 14
第 2 章 搭建Web开发环境 16
2.1 下载和安装Visual Studio 16
2.2 第一个ASP.NET项目 19
2.3 生成和调试程序 24
2.3.1 为何要用生成 24
2.3.2 增加工具栏按钮 26
2.3.3 单步调试ASP.NET项目 27
2.4 简要剖析项目 30
第 3 章 ASP.NET MVC编程基础 34
3.1 MVC概述 34
3.1.1 基本概念 34
3.1.2 MVC执行顺序 35
3.1.3 ASP.NET MVC和传统ASP.NET的比较 35
3.1.4 ASP.NET MVC和WebForm的比较 35
3.2 添加新控制器 36
3.2.1 新建项目并添加控制器源文件 36
3.2.2 基于路由为方法增加一个参数 38
3.2.3 基于路由为方法增加多个参数 39
3.2.4 不改变路由为方法增加多个参数 41
3.3 添加视图 42
3.3.1 新建项目并添加视图文件 42
3.3.2 更改视图和布局页面 44
3.3.3 更改视图标题 45
3.3.4 将数据从控制器传递给视图 46
3.4 添加模型 47
3.4.1 模型的实现方式 47
3.4.2 新建项目并添加类 48
3.4.3 ViewData方式传递数据到视图 49
3.4.4 ViewBag方式传递数据到视图 50
3.4.5 通过返回View传递数据到视图 51
3.4.6 TempData方式传递数据到视图 54
3.5 模型绑定基础 55
3.5.1 基本概念 55
3.5.2 模型绑定的过程 56
3.5.3 模型绑定的作用 56
3.5.4 模型绑定的默认数据源 56
3.5.5 模型绑定的自定义数据源 57
3.5.6 简单类型的模型绑定 58
3.5.7 复杂类型的模型绑定 58
第 4 章 Razor语法基础 61
4.1 概述 61
4.1.1 运行原理 62
4.1.2 第一个Razor范例 62
4.2 代码块 63
4.2.1 Razor的注释 63
4.2.2 关键字 63
4.2.3 输出字符@和电子邮件 63
4.2.4 隐式表达式 64
4.2.5 显式表达式 65
4.2.6 表达式编码 65
4.2.7 Razor代码块 66
4.2.8 隐式转换 67
4.2.9 显式分隔转换 67
4.2.10 以@:符号显式行转换 67
4.2.11 条件属性呈现 68
4.2.12 条件语句 68
4.2.13 循环语句 69
4.3 指令块 71
4.3.1 @function指令定义方法 71
4.3.2 @using指令引入命名空间 72
4.3.3 @model指令指定对象类型 73
4.3.4 布局类指令 73
4.4 异常处理 73
第 5 章 HTML辅助器 76
5.1 HtmlHelper简介 76
5.2 辅助器的分类 77
5.3 工作原理 77
5.4 弱类型HtmlHelper 78
5.4.1 准备试验环境 78
5.4.2 ActionLink链接 80
5.4.3 RouteLink链接 82
5.4.4 TextBox输入框 82
5.4.5 Hidden隐藏域 82
5.4.6 Password密码输入框 83
5.4.7 CheckBox复选框 83
5.4.8 RadioButton单选按钮 83
5.4.9 DropDownList下拉菜单 84
5.4.10 ListBox多选框 84
5.4.11 添加属性 85
5.4.12 Form表单 85
5.4.13 使用TagBuilder创建自定义标签 88
5.5 强类型HtmlHelper 89
5.5.1 强类型HtmlHelper方法 89
5.5.2 LabelFor数据标签 91
5.5.3 DisplayFor与EditorFor显示和编辑Model数据 92
5.6 支架辅助器 93
第 6 章 LINQ的基本使用 99
6.1 基本概念 99
6.2 LINQ提供的程序 99
6.3 LINQ所使用的语法 100
6.3.1 查询表达式语法 100
6.3.2 方法语法 101
6.4 查询表达式语法的使用 101
6.4.1 from-in-select的简单使用 101
6.4.2 使用select的匿名类型形式 104
6.4.3 where子句 106
6.4.4 group…by子句 108
6.4.5 orderby子句 109
6.5 委托 110
6.5.1 委托的基本概念 110
6.5.2 声明委托 111
6.5.3 通过命名方法使用委托 111
6.5.4 通过delegate关键字使用委托 114
6.5.5 通过Lambda表达式使用委托 115
6.5.6 多播委托 117
6.5.7 深入研究委托的 =和-= 119
6.5.8 内置委托 120
6.6 Expression表达式树 124
6.6.1 表达式树是什么 124
6.6.2 表达式树基类Expression 125
6.6.3 常用的表达式类型 127
6.6.4 Expression类 129
6.7 方法调用语法 132
6.7.1 过滤元素的Where方法 132
6.7.2 选取元素的Select和SelectMany方法 136
6.7.3 排序元素的OrderBy方法 138
6.7.4 元素分组的GroupBy方法 140
6.7.5 元素分组的ToLookup方法 140
6.7.6 延迟查询 141
第 7 章 数据库快速开发工具Entity Framework 144
7.1 Entity Framework概述 144
7.1.1 ORM是什么 144
7.1.2 什么是Entity Framework 145
7.1.3 EF的优缺点 146
7.1.4 EF的适用场合 147
7.1.5 EF的组成结构 147
7.1.6 EF相对于ADO.NET的区别和优点 148
7.1.7 EF的3种开发方式 148
7.2 常用数据库的准备 149
7.2.1 准备LocalDB 150
7.2.2 下载和安装MySQL 153
7.2.3 登录和使用MySQL 155
7.2.4 关闭MySQL的SSL 157
7.2.5 让Visual Studio连接到MySQL 159
7.2.6 卸载MySQL 160
7.2.7 传统方式访问MySQL数据库 161
7.3 基础知识的准备 163
7.3.1 实体之间的关系 163
7.3.2 主键 164
7.3.3 外键 164
7.3.4 外键约束 165
7.3.5 HTTP中POST提交数据的4种方式 165
7.3.6 TryUpdateModel更新model 168
7.3.7 MVC中的RedirectToAction 170
7.4 Code First开发基础 170
7.4.1 实体类及其属性 171
7.4.2 导航属性的概念 173
7.4.3 EF中的关系 173
7.4.4 约定、外键和导航属性 174
7.4.5 实体的类型 179
7.4.6 实体对象的状态 180
7.4.7 数据库上下文基类DbContext 181
7.4.8 数据集类DbSet 184
7.4.9 不通过配置文件创建数据库 185
7.4.10 数据库连接字符串 190
7.4.11 常用数据库的连接字符串范例 195
7.4.12 通过配置文件创建数据库 202
7.4.13 基于EF的增、删、改、查操作 205
7.5 基于Code First的Web案例 213
7.5.1 创建Entity Framework数据模型 213
7.5.2 查看并操作数据库实验 222
7.5.3 实现基本的CRUD功能 225
7.5.4 排序、筛选和分页 237
7.5.5 完善关于页 244
7.6 Database First开发基础 246
7.6.1 准备数据库 246
7.6.2 Database First模式的数据库应用开发 248
7.7 Model First开发基础 257
第 8 章 服务端数据注解和验证 269
8.1 概述 269
8.1.1 为何要验证用户输入 269
8.1.2 数据注解及其分类 270
8.2 内置验证注解 270
8.2.1 Required非空验证 271
8.2.2 StringLength字符串长度验证 273
8.2.3 RegularExpression正则表达式验证 274
8.2.4 Range数值范围验证 275
8.2.5 Compare特性 277
8.2.6 Remote远程服务器验证 277
8.3 显示性注解 283
8.3.1 DisplayName显示属性名称 283
8.3.2 DisplayFormat设置显示格式 285
8.3.3 ReadOnly设置只读 286
8.3.4 HiddenInput隐藏属性 290
8.3.5 ScaffoldColumn彻底不显示属性 292
8.3.6 分部视图 295
8.3.7 UIHint定制属性显示方式 301
8.4 其他注解 303
8.4.1 DataType提供属性特定信息 303
8.4.2 映射相关的数据注解NotMapped 304
8.4.3 自定义校验特性 305
第 9 章 模型模板 308
9.1 模型元数据 308
9.1.1 元数据 308
9.1.2 模型元数据介绍 309
9.1.3 Model与View的使用关系 309
9.1.4 元数据驱动设计 310
9.1.5 元数据的层次结构 311
9.1.6 模型元数据的作用 312
9.1.7 自定义模板 312
9.2 预定义模板 314
9.2.1 EmailAddress模板 314
9.2.2 HiddenInput模板 315
9.2.3 Html模板 316
9.2.4 Text与String模板 317
9.2.5 Url模板 318
9.2.6 MultilineText模板 319
9.2.7 Password模板 319
9.2.8 Decimal模板 320
9.2.9 Collection模板 321
第 10 章 前端验证 323
10.1 基于HTML的客户端验证 324
10.2 基于jQuery Validation Unobtrusive的客户端验证 326
10.2.1 基本概念 326
10.2.2 优点 326
10.2.3 开启或关闭客户端验证 327
10.2.4 使用jQuery Validation Unobtrusive的基本步骤 327
10.2.5 基本验证规则 328
10.2.6 data-val-required和[Required]特性的区别 330
10.2.7 复杂一点的规则 330
第 11 章 安全与身份验证 334
11.1 概述 334
11.1.1 ASP.NET MVC提供的安全特性 334
11.1.2 身份验证和授权 335
11.1.3 ASP.NET MVC中的用户身份验证和授权 335
11.1.4 授权 336
11.1.5 角色管理 336
11.1.6 用户管理 336
11.1.7 记录用户的验证状态 337
11.1.8 命名空间System.Web.Security 337
11.2 会话 338
11.2.1 基本概念 338
11.2.2 工作原理 340
11.2.3 使用会话的优势 340
11.2.4 会话的应用场景 341
11.3 ASP.NET内置对象 342
11.3.1 基本概念 342
11.3.2 使用内置对象的途径 343
11.3.3 Response对象 343
11.4 Request对象 348
11.4.1 Server对象 351
11.4.2 Session对象 353
11.4.3 Application对象 355
11.5 Cookie 356
11.5.1 基本概念 356
11.5.2 工作原理 357
11.5.3 Cookie的分类 358
11.5.4 Session和Cookie比较 358
11.5.5 Cookie的作用 359
11.5.6 Cookie类HttpCookie 359
11.5.7 管理Cookie 360
11.6 用户凭证管理框架 362
11.6.1 概述 362
11.6.2 成员资格类Membership 363
11.6.3 CreateUser创建用户 367
11.6.4 ValidateUser验证用户 369
11.7 表单身份验证 369
11.7.1 验证类型 369
11.7.2 基本概念 370
11.7.3 启用表单验证 371
11.7.4 表单验证类FormsAuthentication 372
11.7.5 登录流程 375
11.7.6 判断用户是否登录 376
11.7.7 FormsAuthenticationTicket创建登录票据 377
11.7.8 SetAuthCookie创建票据并保存到Cookie 380
11.7.9 IPrincipal和IIdentity 381
11.7.10 类Membership与类FormsAuthentication的功能区别 381
11.8 操作方法的过滤访问 381
11.8.1 Authorize授权过滤器 381
11.8.2 匿名访问控制器方法 406
11.8.3 HandleError异常过滤器 409
11.8.4 ActionFilter自定义过滤器 411
11.9 缓存和授权 412
第 12 章 音乐唱片管理系统开发实战 416
12.1 新建项目 416
12.2 添加控制器 416
12.2.1 使用HomeController 417
12.2.2 添加StoreController 417
12.3 视图和ViewModel 420
12.3.1 修改视图模板 420
12.3.2 对常见网站元素使用布局 421
12.3.3 更新StyleSheet 422
12.3.4 添加流派和专辑模型类 423
12.3.5 使用模型将信息传递给视图 424
12.3.6 在页面之间添加链接 427
12.4 模型和数据访问 428
12.4.1 使用Code First模式访问数据库 429
12.4.2 添加艺术家模型类 429
12.4.3 更新专辑和流派模型类 429
12.4.4 创建连接字符串 430
12.4.5 准备安装Entity Framework 430
12.4.6 安装SQL Server Compact驱动 431
12.4.7 添加上下文类 431
12.4.8 添加商品种子数据 431
12.4.9 查询数据库 433
12.4.10 更新浏览页面 434
12.5 商品管理 438
12.5.1 创建StoreManagerController 439
12.5.2 修改Index视图和动作 440
12.5.3 了解应用商店管理器 443
12.5.4 查看商店管理器的控制器类 443
12.5.5 查看商店管理器Index方法 444
12.5.6 查看详细信息操作 444
12.5.7 创建操作 444
12.5.8 编辑操作 449
12.5.9 删除操作 451
12.5.10 使用HTML帮助程序截断文本 452
12.5.11 使用数据注解进行模型验证 453
第 13 章 一百书店系统开发实战 456
13.1 系统设计 456
13.2 用户管理 457
13.2.1 添加用户模型类 457
13.2.2 添加角色模型类 458
13.2.3 安装Entity Framework 459
13.2.4 创建数据库上下文类 459
13.2.5 准备生成数据库 461
13.2.6 添加Users控制器 462
13.2.7 新增用户管理链接 464
13.2.8 完善创建用户功能 464
13.2.9 完善编辑功能 465
13.2.10 细节和删除功能 466
13.3 图书管理 466
13.3.1 添加用户模型类 466
13.3.2 添加图书类别 467
13.3.3 在数据库上下文类中添加数据集成员 467
13.3.4 添加Books控制器 467
13.3.5 添加样本数据并删除数据库 468
13.3.6 首页新增图书管理链接并运行 469
13.3.7 实现图书管理的搜索功能 470
13.4 实现首页列表区 471
13.4.1 实现视图 472
13.4.2 实现动作方法 474
13.4.3 准备运行查看首页列表区 475
13.5 实现首页类别区 475
13.5.1 实现视图 475
13.5.2 实现动作方法 476
13.5.3 测试首页类别查询功能 476
13.6 实现搜索功能 477
13.6.1 实现视图 477
13.6.2 实现动作方法 477
13.6.3 测试首页搜索功能 478
13.7 注册、登录和注销 478
13.7.1 首页增加登录链接 479
13.7.2 添加GET方式的Login方法 479
13.7.3 添加Login视图 479
13.7.4 添加GET方式的注册 480
13.7.5 添加Register视图 480
13.7.6 添加POST方式的注册 480
13.7.7 开启表单验证 480
13.7.8 添加POST方式的Login方法 481
13.7.9 添加注销方法 482
13.7.10 不同角色显示不同视图 482
13.7.11 此时注册、登录和注销 483
13.8 购物车 484
13.8.1 添加购物车商品模型类 484
13.8.2 在数据库上下文类中添加数据集成员 485
13.8.3 添加购物车商品控制器 485
13.8.4 实现购物车Index视图 485
13.8.5 实现购物车的角色访问控制 487
13.8.6 添加插入商品到购物车方法 488
13.8.7 增加、减少和删除 490
13.8.8 购物车结算产生订单 491
13.9 订单处理 495
13.9.1 买家查看订单 496
13.9.2 买家付款 499
13.9.3 管理员发货 500
13.9.4 买家确认收货 501
13.9.5 取消订单 501
13.9.6 删除订单 501
13.9.7 评价订单 502
13.10 一些收尾工作 505
13.10.1 个人信息中心 505
13.10.2 更新关于和联系方式 506
13.10.3 美化顶部横幅 506