下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > Web开发 >ASP > 精通ASP.NET 4.5(第5版)

精通ASP.NET 4.5(第5版)

综合评级:★★★★★

定价:149.00

作者:[美]Adam Freeman 等著

出版社:人民邮电出版社

出版日期:2014年9月

页数:1008

字数:1713000

ISBN:9787115364111

书籍介绍
《精通ASP.NET 4.5(第5版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET 4.5的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。《精通ASP.NET 4.5(第5版)》还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。这一版对原有章节进行了全面修订和更新,还简要介绍了针对移动设备开发的新特性。

  《精通ASP.NET 4.5(第5版)》适合各层次ASP.NET程序开发人员阅读。

相关课程
目录

第一部分 入门

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

1.1 准备工作站 

1.2 创建新的ASP.NET项目 

1.2.1 添加新的Web窗体 

1.2.2 测试示例应用程序 

1.3 创建简单的应用程序 

1.3.1 设定场景 

1.3.2 创建数据模型和存储库 

1.3.3 创建窗体并设置其样式 

1.3.4 处理窗体 

1.4 创建摘要视图 

1.4.1 设置动态HTML的格式 

1.4.2 测试动态代码 

1.4.3 调用代码隐藏方法 

1.5 执行验证 

1.6 总结 

第2章 ASP.NET背景信息 

2.1 ASP.NET Framework概述 

2.2 关于本书 

2.2.1 所需了解的信息 

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

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

2.2.4 本书是否包含大量示例 

2.3 本书的结构 

2.4 了解Web窗体 

2.4.1 Web窗体的优势 

2.4.2 了解Web窗体的劣势 

2.5 总结 

第3章 C#基本功能 

3.1 创建示例项目 

3.2 使用自动实现的属性 

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

3.4 使用扩展方法 

3.4.1 将扩展方法应用于接口 

3.4.2 创建过滤式扩展方法 

3.5 使用lambda表达式 

3.6 使用自动类型推断 

3.7 使用匿名类型 

3.8 使用泛型类型 

3.8.1 使用通用基类 

3.8.2 使用泛型类型 

3.9 显式实现接口 

3.10 执行语言集成查询 

3.11 使用异步方法 

3.12 总结 

第4章 使用jQuery 

4.1 创建示例项目 

4.1.1 在示例项目中添加jQuery 

4.1.2 在Web窗体中添加jQuery 

4.2 jQuery入门 

4.2.1 等待DOM 

4.2.2 jQuery语句 

4.3 选择元素 

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

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

4.3.3 使用特性选择元素 

4.3.4 使用过滤器选择元素 

4.3.5 使用jQuery函数 

4.4 使用jQuery事件 

4.5 处理JSON数据 

4.6 总结 

第5章 基本开发工具 

5.1 创建示例项目 

5.2 使用Visual Studio调试器 

5.2.1 创建条件断点 

5.2.2 了解应用程序状态 

5.2.3 使用Immediate Window 

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

5.3.1 使用javaScript Console 

5.3.2 使用网络监视器 

5.3.3 使用Javascript Profiler 

5.4 使用NuGet 

5.5 使用Opera Mobile 

5.6 使用JavaScript库 

5.6.1 jQuery、jQuery UI和jQuery Mobile 

5.6.2 Knockout 

5.6.3 Modernizr 

5.6.4 requireJS 

5.7 总结 

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

6.1 创建项目 

6.1.1 创建文件夹结构 

6.1.2 添加全局应用程序类 

6.1.3 创建数据库 

6.1.4 定义数据库架构 

6.1.5 向数据库中添加数据 

6.2 创建数据模型和存储库 

6.2.1 创建数据模型类 

6.2.2 添加Entity Framework 

6.2.3 创建Entity Framework上下文 

6.2.4 创建产品存储库 

6.3 创建产品清单 

6.4 添加分页 

6.4.1 显示产品页 

6.4.2 添加分页链接 

6.5 设置列表Web窗体的样式 

6.5.1 创建母版页 

6.5.2 自定义母版页 

6.5.3 应用母版页 

6.5.4 测试母版页 

6.6 总结 

第7章 SportsStore:导航和购物篮 

7.1 配置URL路由 

7.1.1 创建路由配置类 

7.1.2 更新全局应用程序类 

7.1.3 使用路由变量 

7.1.4 测试路由配置 

7.1.5 生成路由链接 

7.2 添加类别信息 

7.2.1 创建用户控件 

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

7.2.3 添加CSS样式 

7.2.4 扩展URL方案 

7.2.5 添加显示类别功能 

7.2.6 突出显示当前类别 

7.3 构建购物篮 

7.3.1 定义Cart类 

7.3.2 添加购物篮按钮 

7.3.3 创建会话帮助程序 

7.3.4 处理窗体发布 

7.3.5 显示购物篮的内容 

7.3.6 测试购物篮 

7.4 总结 

第8章 SportsStore:完善购物篮 

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

8.1.1 了解视图状态 

8.1.2 禁用视图状态 

8.2 添加购物篮摘要 

8.2.1 定义CSS样式 

8.2.2 应用购物篮摘要控件 

8.2.3 合并用户控件声明 

8.3 提交订单 

8.3.1 扩展数据库和数据模型 

8.3.2 添加Checkout链接和URL 

8.3.3 处理订单 

8.4 添加验证 

8.4.1 添加NuGet程序包 

8.4.2 创建并使用脚本捆绑包 

8.4.3 设置客户端验证 

8.4.4 创建服务器控件 

8.4.5 应用服务器控件 

8.5 总结 

第9章 SportsStore:管理 

9.1 添加常用构建块 

9.1.1 扩展路由配置 

9.1.2 添加管理母版页 

9.1.3 添加CSS样式表 

9.1.4 添加Web窗体 

9.2 添加订单管理 

9.2.1 清空和填充数据库 

9.2.2 添加Web窗体内容 

9.2.3 创建代码隐藏类 

9.3 添加类别管理 

9.3.1 扩展存储库 

9.3.2 添加Web窗体 

9.3.3 设置CRUD方法 

9.3.4 测试类别管理 

9.4 设置授权 

9.4.1 确保管理页面的安全 

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

9.4.3 测试失败的身份验证 

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

9.5 总结 

第10章 SportsStore:部署 

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

10.2 准备Windows Azure 

10.2.1 创建网站和数据库 

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

10.2.3 创建架构 

10.3 部署应用程序 

10.4 总结 

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

11.1 了解问题所在 

11.2 了解解决方案 

11.3 创建示例项目 

11.3.1 设置静态内容 

11.3.2 设置数据模型 

11.3.3 实现存储库 

11.3.4 添加基础架构 

11.4 实现RSVP页面 

11.4.1 创建表示器 

11.4.2 创建视图 

11.4.3 测试RSVP页面 

11.5 添加单元测试 

11.5.1 创建单元测试项目 

11.5.2 创建单元测试 

11.5.3 测试输入值 

11.6 添加依赖注入 

11.6.1 添加NuGet程序包 

11.6.2 配置注入 

11.7 完成整个应用程序 

11.7.1 创建表示器 

11.7.2 配置依赖注入 

11.8 总结 

第二部分 核心ASP.NET平台

第12章 使用Web窗体 

12.1 创建示例项目 

12.2 了解Web窗体文件 

12.2.1 使用代码片段 

12.2.2 了解可编程HTML元素 

12.2.3 了解控件 

12.3 了解代码隐藏类 

12.4 了解Web窗体的工作机制 

12.4.1 处理可编程HTML元素 

12.4.2 编译Web窗体 

12.5 使用母版页 

12.5.1 配置母版页 

12.5.2 了解母版页占位符 

12.5.3 应用母版页 

12.5.4 使用母版页代码隐藏类 

12.5.5 嵌套母版页 

12.6 总结 

第13章 生命周期和上下文 

13.1 创建示例项目 

13.2 了解应用程序生命周期 

13.3 了解请求生命周期 

13.3.1 了解模块和处理程序 

13.3.2 处理请求生命周期事件 

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

13.4 了解上下文对象 

13.4.1 使用HttpContext对象 

13.4.2 使用HttpApplication对象 

13.4.3 使用HttpRequest对象 

13.4.4 使用HttpResponse对象 

13.5 进行组合 

13.5.1 对请求计时 

13.5.2 限制访问 

13.5.3 记录请求信息 

13.6 总结 

第14章 模块 

14.1 准备示例应用程序 

14.2 了解模块 

14.2.1 创建模块 

14.2.2 注册模块 

14.3 创建模块项目 

14.3.1 创建Visual Studio项目 

14.3.2 创建模块 

14.3.3 注册模块 

14.4 使用模块事件 

14.4.1 定义模块事件 

14.4.2 处理模块事件 

14.4.3 按名称查找模块 

14.5 使用内置模块 

14.6 进行组合 

14.7 总结 

第15章 处理程序 

15.1 准备示例应用程序 

15.2 了解处理程序 

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

15.4 创建一般处理程序 

15.4.1 实现自定义行为 

15.4.2 测试一般处理程序 

15.5 创建自定义处理程序 

15.5.1 创建自定义处理程序 

15.5.2 注册自定义处理程序 

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

15.6.1 控制处理程序实例化 

15.6.2 动态选择处理程序 

15.6.3 重复使用处理程序 

15.7 协调模块与处理程序 

15.7.1 使用Items集合 

15.7.2 使用声明式接口 

15.8 进行组合 

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

15.8.2 扩展基类 

15.8.3 编写处理程序 

15.8.4 注册处理程序工厂 

15.8.5 测试处理程序工厂 

15.9 总结 

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

16.1 准备示例应用程序 

16.2 了解Page类 

16.3 了解页面生命周期 

16.4 处理控件事件 

16.4.1 创建一个简单的控件 

16.4.2 注册并应用控件 

16.5 接收控件事件 

16.6 了解端到端Web生命周期 

16.7 页面上下文 

16.7.1 访问上下文对象 

16.7.2 设置Page指令值 

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

16.8 进行组合 

16.9 总结 

第17章 管理请求执行过程 

17.1 准备示例应用程序 

17.2 使用URL重定向 

17.2.1 执行URL重定向 

17.2.2 手动执行重定向 

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

17.3.1 预先选择处理程序 

17.3.2 传输请求 

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

17.4 进行组合 

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

17.4.2 使用HTTP重定向 

17.4.3 预先选择处理程序 

17.4.4 执行多个处理程序 

17.5 总结 

第18章 管理状态数据 

18.1 创建示例应用程序 

18.2 了解状态数据 

18.3 存储应用程序数据 

18.4 存储用户数据 

18.4.1 创建配置文件数据库 

18.4.2 配置数据库连接 

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

18.4.4 定义配置文件提供程序 

18.4.5 定义配置文件属性 

18.4.6 使用配置文件数据 

18.5 存储会话数据 

18.5.1 使用会话数据 

18.5.2 配置会话数据 

18.5.3 使用状态服务器 

18.5.4 使用SQL数据库 

18.6 使用视图数据 

18.7 使用cookie 

18.8 进行整合 

18.8.1 创建模块 

18.8.2 创建Web窗体 

18.9 总结 

第19章 缓存 

19.1 准备示例应用程序 

19.2 使用应用程序缓存 

19.3 管理数据项缓存 

19.4 使用依赖项缓存数据 

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

19.4.2 创建自定义依赖项 

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

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

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

19.5 接收缓存通知 

19.5.1 接收清除缓存通知 

19.5.2 使用通知避免清除缓存 

19.6 配置缓存 

19.7 进行组合 

19.8 总结 

第20章 缓存输出 

20.1 准备示例应用程序 

20.2 缓存Web窗体输出 

20.2.1 控制端到端缓存 

20.2.2 缓存多个内容副本 

20.2.3 创建缓存配置文件 

20.3 选择性地更新内容 

20.4 缓存用户控件输出 

20.5 缓存服务器控件输出 

20.6 创建缓存依赖项 

20.7 使用自定义输出缓存 

20.7.1 创建自定义缓存实现 

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

20.7.3 动态选择输出缓存实现 

20.8 配置输出缓存 

20.9 进行组合 

20.9.1 创建处理程序工厂类 

20.9.2 注册处理程序工厂 

20.10 总结 

第21章 处理错误 

21.1 准备示例项目 

21.2 了解错误 

21.3 自定义默认行为 

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

21.3.2 处理特定HTTP错误 

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

21.4 控制错误处理过程 

21.4.1 在Web窗体中处理错误 

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

21.5 处理多个错误 

21.5.1 报告错误 

21.5.2 显示错误 

21.5.3 拦截错误 

21.6 进行组合 

21.6.1 删除现有错误处理代码 

21.6.2 定义模块 

21.7 总结 

第22章 管理路径 

22.1 准备示例项目 

22.1.1 创建模块 

22.1.2 创建附加内容 

22.2 使用路径 

22.2.1 获取路径信息 

22.2.2 操纵路径 

22.3 管理虚拟路径 

22.3.1 设置默认文档 

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

22.3.3 重写路径 

22.4 使用友好URL程序包 

22.4.1 禁用之前的示例 

22.4.2 安装和配置NuGet程序包 

22.4.3 使用FriendlyUrls库功能 

22.5 进行组合 

22.5.1 编写文件 

22.5.2 重写路径 

22.6 总结 

第23章 URL路由 

23.1 准备示例项目 

23.2 为路由准备应用程序 

23.3 使用固定路由 

23.4 添加变量段 

23.4.1 处理范围过大的路由 

23.4.2 创建可删节URL 

23.4.3 创建长度可变的段 

23.5 路由段值模型绑定 

23.6 生成传出URL 

23.7 进行组合 

23.7.1 生成诊断HTML 

23.7.2 测试URL匹配 

23.8 总结 

第24章 高级URL路由 

24.1 准备示例项目 

24.2 使用高级约束条件 

24.2.1 通过HTTP方法限制路由 

24.2.2 创建自定义路由限制 

24.3 路由文件请求 

24.4 使用路由处理程序 

24.4.1 阻止请求路由 

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

24.5 创建自定义RouteBase实现 

24.6 进行组合 

24.6.1 禁用ASPX请求 

24.6.2 路由到其他文件类型 

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

24.7 总结 

第25章 身份验证和授权 

25.1 准备示例项目 

25.2 了解窗体身份验证 

25.3 配置ASP.NET身份验证 

25.4 执行身份验证 

25.4.1 验证用户身份 

25.4.2 获取身份验证信息 

25.5 执行授权 

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

25.5.2 创建授权策略 

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

25.6 避开授权 

25.7 授权已路由的URL 

25.8 进行组合 

25.8.1 重建身份验证Web窗体 

25.8.2 添加母版页 

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

25.9 总结 

第26章 成员资格 

26.1 准备示例项目 

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

26.2.1 安装通用提供程序 

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

26.2.3 创建用户和角色 

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

26.3 使用成员资格 

26.3.1 执行密码更改 

26.3.2 执行密码恢复 

26.3.3 执行注册 

26.4 进行组合 

26.5 总结 

第27章 ASP.NET配置 

27.1 准备示例项目 

27.2 了解配置层次结构 

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

27.3.1 使用应用程序设置 

27.3.2 处理连接字符串 

27.3.3 使用配置节 

27.3.4 处理整个配置 

27.4 创建自定义配置节和组 

27.4.1 创建简单的配置节 

27.4.2 创建集合配置节 

27.4.3 创建配置节组 

27.5 使用外部配置文件 

27.6 锁定配置节 

27.7 进行组合 

27.8 总结 

第28章 异步请求处理 

28.1 准备示例项目 

28.2 了解问题所在 

28.3 创建异步Web窗体 

28.3.1 使用异步方法 

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

28.3.3 执行多个任务 

28.4 创建异步模块 

28.5 创建异步处理程序 

28.6 总结 

第三部分 窗体和控件

第29章 使用控件 

29.1 准备示例项目 

29.2 了解控件 

29.2.1 了解基本的控件类 

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

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

29.2.4 使用自定义服务器控件 

29.2.5 使用控件显示数据 

29.2.6 使用控件模拟桌面开发 

29.3 利用控件层次结构 

29.3.1 在控件层次结构中导航 

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

29.3.3 以编程方式添加控件 

29.4 进行组合 

29.5 总结 

第30章 窗体和请求验证 

30.1 准备示例项目 

30.2 了解服务器端form元素 

30.3 检测窗体发布和回传 

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

30.3.2 检查POST请求 

30.4 处理窗体数据 

30.5 了解“一窗体”限制 

30.6 了解请求验证 

30.6.1 使用预先请求验证 

30.6.2 使用延迟请求验证 

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

30.6.4 在控件中验证请求 

30.7 进行组合 

30.8 总结 

第31章 创建自定义控件 

31.1 准备示例项目 

31.2 创建基本的控件 

31.2.1 了解Control指令 

31.2.2 注册和应用控件 

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

31.3 在控件中添加功能 

31.4 了解控件ID 

31.4.1 标识控件生成的HTML元素 

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

31.5 定义元素特性 

31.5.1 创建枚举特性 

31.5.2 创建集合特性 

31.6 创建服务器控件 

31.6.1 注册服务器控件 

31.6.2 使用HtmlTextWriter类 

31.7 进行组合 

31.8 总结 

第32章 有状态控件 

32.1 准备示例项目 

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

32.2.1 使用会话状态 

32.2.2 通过窗体元素添加状态 

32.2.3 使用视图状态 

32.2.4 使用控件状态 

32.3 管理应用程序视图状态 

32.3.1 配置应用程序视图状态 

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

32.3.3 配置控件视图状态 

32.4 进行组合 

32.4.1 对input元素使用视图状态 

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

32.4.3 视图状态数据不断增加 

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

32.5 总结 

第33章 服务器端HTML元素 

33.1 准备示例项目 

33.2 了解服务器端元素 

33.2.1 使用基类功能 

33.2.2 使用容器元素 

33.3 使用页面结构元素 

33.4 处理窗体元素 

33.4.1 使用input元素 

33.4.2 使用其他窗体元素 

33.5 使用HTML表 

33.5.1 枚举表 

33.5.2 使用特定表元素 

33.5.3 以编程方式创建表 

33.6 使用其他元素 

33.7 进行组合 

33.8 总结 

第34章 模型绑定 

34.1 准备示例项目 

34.2 了解问题所在 

34.3 应用模型绑定 

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

34.5 使用绑定特性 

34.5.1 应用模型绑定特性 

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

34.6 进行组合 

34.6.1 创建自我验证模型类 

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

34.7 总结 

第35章 数据绑定 

35.1 准备示例项目 

35.2 了解数据绑定 

35.2.1 配置数据绑定 

35.2.2 组合元素和数据控件 

35.3 编写自定义数据控件 

35.3.1 管理数据控件视图状态 

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

35.3.3 为模板添加功能 

35.4 进行组合 

35.5 总结 

第36章 基本数据控件 

36.1 选择数据控件 

36.2 准备示例项目 

36.3 使用列表数据控件 

36.3.1 使用CheckBoxList控件 

36.3.2 使用DropDownList控件 

36.3.3 使用ListBox控件 

36.3.4 使用RadioButtonList控件 

36.3.5 使用BulletedList控件 

36.4 使用Repeater控件 

36.4.1 Repeater的标准用法 

36.4.2 使用Repeater模板 

36.4.3 以编程方式创建模板 

36.5 进行组合 

36.6 总结 

第37章 复杂数据控件 

37.1 准备示例项目 

37.1.1 准备脚本管理 

37.1.2 扩展CSS 

37.2 使用FormView控件 

37.2.1 定义代码隐藏类 

37.2.2 定义模板 

37.2.3 管理外部元素 

37.2.4 使用FormView控件编辑数据 

37.2.5 实现数据方法 

37.2.6 了解FormView事件 

37.3 使用ListView控件 

37.3.1 使用ListView的基本功能 

37.3.2 对数据分页 

37.3.3 了解ListView事件 

37.4 进行组合 

37.5 总结 

第38章 其他ASP.NET控件 

38.1 准备示例应用程序 

38.2 使用富UI控件 

38.2.1 富UI控件过于抽象 

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

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

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

38.3 选择富UI控件 

38.4 使用其他控件 

38.4.1 使用Literal控件 

38.4.2 使用PlaceHolder控件 

38.4.3 使用MultiView控件 

38.5 进行组合 

38.6 总结 

第四部分 客户端开发

第39章 管理脚本和样式 

39.1 准备示例项目 

39.2 了解脚本管理问题 

39.2.1 管理JavaScript文件版本 

39.2.2 管理库依赖关系 

39.2.3 管理简化 

39.3 使用捆绑包 

39.3.1 为捆绑包准备项目 

39.3.2 创建脚本捆绑包 

39.3.3 创建样式捆绑包 

39.4 使用捆绑优化 

39.4.1 使用本地优化 

39.4.2 使用内容传送网络 

39.5 确保库对控件可用 

39.6 进行组合 

39.7 总结 

第40章 ajax和Web服务 

40.1 准备示例项目 

40.2 使用Web API创建Web服务 

40.2.1 了解目标 

40.2.2 创建Web API控制器 

40.2.3 创建路由配置 

40.2.4 测试Web服务 

40.2.5 实现控制器方法 

40.3 应用Web服务 

40.4 处理事件验证 

40.4.1 禁用事件验证 

40.4.2 替换控件 

40.5 进行组合 

40.6 总结 

第41章 客户端验证 

41.1 准备示例项目 

41.1.1 安装JavaScript程序包 

41.1.2 创建验证脚本捆绑包 

41.2 使用HTML5验证 

41.3 使用内置验证控件 

41.4 直接应用验证特性 

41.5 删除重复的验证策略 

41.6 进行组合 

41.6.1 更新Web服务 

41.6.2 更新模型对象 

41.6.3 创建JavaScript 

41.7 总结 

第42章 针对移动设备 

42.1 准备示例项目 

42.2 标识移动设备 

42.3 切换移动设备的母版页 

42.4 传送不同的Web窗体 

42.4.1 安装和配置程序包 

42.4.2 传送自定义内容 

42.4.3 允许用户进行选择 

42.5 进行组合 

42.6 总结

热门图书
推荐新闻
技术文库
论坛推荐