用户自定义属性表结构设计_属性类型定制及其妙用

引擎版本 4.22.0

属性类型定制简介

在介绍属性类型定制前先了解下引擎提供的默认的详细布局。

  • 默认详细布局

只要我们的UPROEPRTY类型是值类型,编辑器系统就会在详细面板为你创建一个默认布局。如下图所示:

606777ecdce4bf43ddd4966ab03227ce.png
  • 属性类型定制(Property Type Customization)

当你创建了需要更改布局的自定义结构时,属性类型定制就变得非常有用。目前属性类型定制只适用于USTRUCT的接口,IPropertyTypeCustomization实现的所有功能都只与结构体一起工作。

属性类型定制最常见的用法时创建比默认显示更好的布局,或者创建设置数据的更直观的小部件。比如引擎默认提供的通过颜色拾取器来设置颜色,软对象选择设置等。

affac94ff9ad0a0a9d71cafe2d2cfdb6.png

快速创建属性类型定制

  • 创建需要定制化显示的结构体

d4b9187b13a99a654a1bd7cb885ad5c9.png

为保证在定制化代码中可以轻松访问该结构体中相关属性,该结构使用USTRUCT宏标记,成员变量使用UPROPERTY宏标记。

这里先记录下未定制化时在详细面板中的效果:

5d8a18b16a76a308c3755a370ba74815.png
  • 创建属性类型定制化类

10d153263d2d7460d1e5fe50786f1d28.png

类名请确保与自定义结构体匹配,并在末尾加上“Customization”。

该类需要继承自IPropertyTypeCustomization接口并实现接口的方法。

我们注意到IPropertyTypeCustomization接口中主要包括两个方法:CustomizeHeader和CustomizeChildren。我们不妨看看源码中的注释:

8fd12196ffcdef75e60e0368934ea49d.png

可以看出CustomizeHeader主要用来处理属性的头,而属性头是该属性在详细面板中显示的所在的行,且不能额外添加行;而CustomizeChildren主要用来处理属性中需要定制化显示的子属性及添加额外的行。一般情况下对于需要定制化显示的结构体属性中只有一个属性时可以放在CustomizeHeader中处理,而一旦该结构体中的属性有多个需要定制化显示则最好放到CustomChildren中处理。

  • 注册属性类型定制化

仅仅创建属性类型定制化时不够的。为了让编辑器知道它的存在,你必须在正确的模块中注册它。由于属性类型定制化属于编辑器环境下使用的,最好将其注册在你游戏的编辑器模块。假如你的游戏中只有一个游戏主模块,你又不想添加一个专门的编辑器模块,那么你可以将其注册在游戏主模块中,但需要使用WITH_EDITOR宏标记。

这里给出一个示例,示例中将属性类型定制化类注册到专门的编辑器模块启动函数中:

ae8a09575412dc9031e4f3d4040e5a2e.png

当然同样需要在专门的编辑器模块的Build.cs中私有依赖PropertyEditor模块:

55b7f37e870ae7335fa78e125e7af14f.png

属性类型定制相关实验

前边介绍了创建属性类型定制的简单步骤,其中IPropertyTypeCustomization中两个方法可能还有点不太明白。这里将在前边的基础上结合一些实验来介绍定制化显示的一些操作。

  • CustomizeChildren和CustomizeHeader函数中均不填写任何代码

0b752697f23d6e35ae92ab18be985988.png

844813915fb6bde4592213697fa56623.png

可以看到在定义的结构体蓝图中是无法看到MyTestStruct相关属性的,很显然需要补充代码啦。

  • 仅在CustomizeHeader中填写代码

在该方法中主要需要处理的是设置HeaderRow中的内容(该属性在详细面板中显示的内容),HeaderRow包含两部分:NameContent和ValueContent。如下图所示的默认bool在详细面板中分割线左侧中显示的属性名字(红框内)是在NameContent中来处理的,分割线右侧属性的值(蓝框内)是中ValueContent来处理的:

63d4f63840b03d47506c862cfeda6f3e.png

假设我们只处理NameContent部分,代码及效果下图所示:

263afa0fe087d65bc7a1d3274cd32cf8.png

59d77914dfee020d99eca0f28bf63a07.png

可见只显示属性名TestStruct,特别地如果想要改名显示的属性名则使用如下代码:

35617bb24a57de1c2887899f792377d3.png

由于我们的结构体包含两个变量,如果全部放到CustomizeHeader函数中处理的话则只能在ValueContent中显示了。

7ecbbad6ef1fbc3bbe88c982d8bd8207.png

这里通过GetChildHandle方法分别得到结构体中两个变量Name和Table,接着使用默认的SProperty来绘制,效果如下图所示:

543fb1286f4d9ced153467f624925f29.png

如果我们想要隐藏变量Table和Name的名字则只需要将代码中注释掉的.ShouldDisplayName(false)开启:

74f10e7960564515e2843fff6e769157.png

这里是为了省事直接通过SProperty来绘制,所以显示的效果很一般是默认属性显示。如果需要自己个性化处理则同样需要写Slate代码来处理,不过需要在一些事件中设置属性值或者获取属性值等,常用的方法是PropertyHandle中的SetValue和GetValue,这里就不再介绍,可以自行查看后边推荐的一些源码。

  • 仅在CustomizeChildren中填写代码

常用的方法是StructBuilder.AddCustomRow,也就是添加一个自定义内容作为结构体的孩子。

7466068174572d3014b1d0fc40f923b4.png

效果如下:

74f10e7960564515e2843fff6e769157.png

可以看到跟前边仅在CustomizeHeader中显示效果一致。但CustomizeHeader中只能添加一行,这里可以添加多行。比如接下来将结构体中变量Name和Table分两行显示:

259609e0cc8d65cd3d14e112ce463f01.png

效果如下图所示:

b3fe2498d04656a27c0a418db1683d86.png
  • CustomizeHeader和CustomizeChildren均填写代码

保持前边CutomizeChildren最后的代码不变,在CustomizeHeader中添加如下代码:

66565db6b76cc486dcf4ddf2fa2835ea.png

效果如下图所示:

4e70203640f39473ca6bb3ee4d3cdfcc.png

此时可以看到跟不做定制化处理的默认显示效果差不多。

由此也可看出CustomizeHeader和CustomizeChildren均填写代码的情况下将产生折叠效果,即CustomizeHeader中充当结构体名字显示的任务,CustomizeChildren中显示结构体成员显示的任务。至于选择在哪个函数中填写逻辑根据个人喜好即可,不必太过纠结。

  • 区分是否在结构体定义蓝图中

前边的实验无一例外都是在结构体定义蓝图中的详细面板中显示,但我们还可以将自定义结构体应用到蓝图变量定义中或者DataTable中,如下图所示:

37f3d46a88dde243e64641a2da2bca00.png

b72ada37c1e23fb22b4f56b6bd0ef18f.png

此时如果想在结构体定义蓝图中和其他环境中做不同的显示效果就需要做进一步的区分。

目前暂时没有好的办法,有一个不太靠谱的方法,代码如下:

5ecf495112c3de0806787db283e2b9bc.png

那么对于在结构体定义蓝图中可以判断该值是否是Default Values;作为蓝图变量则判断是否是Default Value;DataTable中则判断是否是RowValue。大家如果有更好的区分方法请告知哈。

巧用属性类型定制

前边介绍了属性类型及其使用方法,也许有人会说感觉没有太大用途,无非是在详细面板中对一个结构体进行定制化显示而已。笔者近期需要做一个DataTable中引用表的一个功能,深深体会到属性类型定制的妙用。

不妨介绍下相关需求:

我们一般做DataTable需要定义一个表结构,针对手游项目的话考虑到热更新,表结构一般使用蓝图来定义。假设我有一张奖励表中需要有一个字段类型是int,填写的是物品表中的物品ID(行名)。那么我就希望在定义奖励表结构时可以制定要引用哪张表如物品表,在对奖励表中物品ID字段编辑时希望通过一个下拉菜单来显示物品表中所有的物品ID,这样不仅方便还保证不会填错物品ID。

此时要实现此功能就只需要定义一个自定义结构体包含两个成员变量int32 ID和TSoftObjectPtr<UDataTable> Table。在奖励表结构蓝图定义中添加字段时选择自定义结构体,同时在该蓝图中仅显示选择表的变量Table,而在奖励表的DataTable中仅显示一个下拉菜单来设置自定义结构体中变量ID的值。

不妨看下效果图:

70b9145663fbf3d8633dcd622273dbc5.png

5691d0e606a725a28e19034faafee6aa.png

注意这里为了同时显示物品表ID对应的名字,就在结构体中额外添加了一个引用的表中说明性值的列名。

可参考的相关源码

我们对于属性类型定制实际操作时可能需要一些参考源代码,这里给出相关代码大家可以自行参阅。

Engine/Source/Editor/DetailCustomizations该模块中全部时详细定制相关,其中不仅包含了属性类型定制也包含类定制,我们如果需要类定制也可参考其中的代码。

特别地值得一看的是DataTableCustomization.cpp,SoftObjectPathCustomization.cpp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该版本提供了下册详细目录可以快速查阅(当然已经提供详细书签) 基本信息 原书名: Programming Windows (Fifth Edition) 原出版社: Microsoft Press 作者: (美)Charles Petzold 译者: 北京博彦科技发展有限责任公司 丛书名: Microsoft 程序设计系列 出版社:北京大学出版社 ISBN:730104187X 上架时间:2004-11-16 出版日期:2004 年9月 页码:1376 版次:1-8 内容简介    如果对Windows开发有什么问题的话,请翻阅PetZold的著作吧。在《Window程序设计》(第5版)中,这位杰出的“Windows先锋奖”(Windows Pioneer Award)获得者根据最新的Windows操作系统权威技术修订了他的经典著作——再一次演示了基本的Win32程序设计的API核心内容。本书的内容包括:    ** 基本内容——输入、输出和对话框    ** Unicode概述    ** 图形——绘图、文本和字体、位图和元文件    ** 内核和打印机    ** 声音和音乐    ** 动态链接    ** 多任务和多线程    ** 多文档界面    ** Internet和 Intranet的程序设计    其中采用的大多是具有代性的示例,这本Petzold著作为使用 Windows 95、Windows 98或 Windows NT的各级windows程序员提供了最基本的参考和指导。没有经验的开发人员也可以从中获取大量的新知识。       作译者 本书提供作译者介绍    Charles Petzold从 1984年开始编写个人计算机程序,从 1985年开始编写 Microsoft Windows程序。他在《Microsoft Systems Joumal》1986年 12月号上发了第一篇关于 Windows程序设计的杂志论文。从 1986年到 1995年,他为《PC Magazine》撰写“Environments”专栏,给读者介绍了Windows和OS/2程序设计的许多方面。 《Windows 程序设计》由微软出版社在1988年首次出版,后来被认为是这方面最好的导论性读本。在1994年5月,Petzold作为仅有的七个人之一(并且是唯一的作家)被《WindowcMagazine》和Microsoft公司授予Windows Pioneer奖, 以彰他对 Microsoft Windows的成功做出的贡献. 在1999年秋天,微软出版社将出版Charles Petzold面向普通读者的第一本书. 暂时命名为 《Code:The Hidden Language of Computer Hardware and Software》, 这本书专门介绍数字信息的本质以及计算机处理数字信息的方式. 作者: Charles Petzold 1994年5月,Petzold作为仅有的七个人之一(并且是唯一的作家)被《Window Magazine》和Microsoft公司授予Windows Pioneer奖,以彰他对 Microsoft Windows的成功做出的贡献。 Charles Petzold从1984年开始编写个人计算机程序,从1985年开始编写 Microsoft Windows程序。他在《Microsoft Systems Joumal》1986年 12月号上发了第一篇关于Windows程序设计的杂志论文。从1986年到1995年,他为《PC Magazine》撰写“Environments”专栏,给读者介绍了Windows和OS/2程序设计的许多方面。 [同作者作品] Microsoft c#Windows程序设计(上下册) Microsoft Windows程序设计——Visual Basic.NET语言描述 Windows 3D编程(英文影印版) 目录 第一部分 基础知识 第一章 开始 l.1 windows环境 1.1.1 windows 简史 1.1.2 windows方面 1.1.3 动态链接 1.2 windows编程选项 1.2. 1 api和内存模式 1.2.2 语言选项 l.2. 3 编程环境 1.2.4 api文档 1.3 编写一个windows程序 1.3.1 字符模式(character-mode)模型 1.3.2 windows 等价程序 1.3.3 头文件 1.3.4 程序入口点 1.3.5 messagebox 函数 1.3.6 编译、链接和运行 第二章 unicode简介 2.1 字符集简史 . 2.1.1 美国标准 2.1.2 国际方面 2.1.3 扩展ascll 2.1.4 双字书字符集 2.1.5 unicode解决方案 2.2 宽字符和c 2.2.1 char数据类型 2. 2. 2 宽字符 2.2.3 宽字符函数 2.2.4 维护单一源代码 2.3 宽字符和windows 2.3.1 windows 头文件类型 2.3.z windows 函数调用 2.3.3 windows的字符串函数 2.3.4 在 windows中使用 printf 2.3.5 格式化消息框 2.3.6 本书与国际化 第三章 窗口和消息 3.1 自己的窗口 3. 1.l 总体结构 3.1.2 hellowin程序 3. 1.3 总体考虑 3.1.4 注册商口类 3.1.5 创建窗口 3.1.6 显示窗口 3.1.7 消息循环 3.1.8 窗口过程 3.1.9 处理消息 3.1.10 播放声音文件 3.1.11 wm_paint消息 3.1.12 wm_destroy消息 3.2 windows编程的难点 3.2.l 别调用我,我会调用您 3.2.2 进队消息与不进队消息 3.2. 3 行动迅速 第四章 输出文本 4.l 绘制和刷新 4.1.1 wm_paint消息 4. 1.2 有效短形和无效矩形 4.2 gdi简介 4.2.l 设备描述 4.2.2 获取设备描述句柄:方法一 4.2.3 绘图信息结构 4.2.4 获取设备描述句柄:方法二 4. 2. 5 textout:细节 4.2.6 系统字体 4.2.7 字符大小 4.2. 8 文本尺寸:细节 4.2.9 格式化文本 4. 2.10 综合使用 4.2.11 sysments1.c窗口过程 4.2.12 空间不够 4. 2.13 客户区的大小 4.3 滚动条 4.3.l 滚动条的范围和位置 4.3.2 滚动条消息 4.3.3 在sysmets中添加滚动功能 4.3.4 绘图程序的组 4.4 建立更好的滚动 4.4.l 滚动条信息函数 4.4.2 滚动范围 4.4.3 新sysmets 4.4. 4 不用鼠标怎么办 第五章 图形基础 5. 1 gdi的结构 5.1. 1 gdi原理 5.1.2 gdi函数调用 5.1.3 gdi日元 5. 1. 4 其他方面 5.2 设备描述 5.2.l 获取设备描述句柄 5.2.2 获取设备描述信息 5.2.3 devcaps1程序 5.2.4 设备的大小 5.2.5 关于色彩 5.2.6 设备描述属性 5.2.7 保存设备描述 5.3 画点和线 5.3.l 写像素 5.3.2 直线 5.3.3 边界框函数 5. 3.4 贝塞尔样条 5.3.5 使用现有画笔(stock pens) 5.3.6 画笔的创建、选择和删除 5.3.7 填充空隙 5.3.8 绘图方式 5.4 绘制填充区域 5.4.1 polygon函数和多边形填充方式 5.4.2 用画刷填充内部 5.5 gdi映射方式 5.5.l 设备坐标和逻辑坐标 5.5.2 设备坐标系 5.5.3 机口和窗口 5.5.4 处理mm_text 5.5. 5 “度量”映射方式 5.5.6 “自作主张的”映射方式 5.5.7 whatsize 程序 5.6 短形、区域和剪裁 5.6.1 矩形函数 5.6.2 随机短形 5.6.3 创建和绘制区域 5. 6.4 短形与区域的剪裁 5.6.5 clover程序 第六章 键盘 6.1 键盘基础 6.1.1 忽略键盘 6.1.2 谁获得了焦点 6.1.3 队列和同步 6.1.4 击键和字符 6. 2 击键消息 6.2.1 系统击键与非系统击键 6.2.2 虚拟键码 6.2.3 iparam信息 6.2.4 换档状态 6.2.5 使用击健消息 6.2.6 为键盘增强sysmets 6.3 字符消息 6.3.1 四类字符消息 6.3.2 消息顺序 6.3.3 处理控制字符 6.3.4 死字符消息 6.4 键盘消息和字符集 6.4.1 keyviewi程序 6.4.2 外语键盘问题 6.4.3 字符集和字体 6.4.4 unicode怎么样? 6.4.5 truetype和大字体 6.5 插入符(不是光标) 6.5.l 插入符函数 6.5.2 typer 程序 第七章 鼠标 7.1 鼠标基础 7.1.1 一些简单的定义 7.2 客户区鼠标消息 7.2.l 简单的鼠标处理:一个例子 7.2.2 处理sha键 7.2.3 双击鼠标键 7.3 非客户区鼠标消息 7.3.1 命中测试消息 7.3.2 从消息产生消息 7.4 程序中的命中测试 7. 4. 1 一个假想的例子 7.4.2 示例程序 7.4.3 使用键盘仿真鼠标 7.4. 4 在checker中添加键盘接口 7.4. 5 将于窗口用于命中测试 7.4.6 checker中的子窗口 7.4.7 子窗口和键盘 7.5 捕获鼠标 7.5.1 设计矩形 7.5.2 捕获的解决方案 7.5.3 blokout2程序 7.6 鼠标轮 7.6.1 后会有期 第八章 计时器 8.1 计时器基础 8.1.1 系统和计时器 8.1.2 计时器消息不是异步的 8.2 计时器的使用:三种方法 8.2.1 方法一 8.2.2 方法二 8.2.3 方法三 8.3 计时器用于时钟 8.3.1 构造数字时钟 8.3.2 获取当前时间 8.3.3 显示数字和冒号 8.3.4 国际化 8.3.5 构造模拟时钟 8.4 为状态报告使用计时器 第九章 子商口控制 9.1 按钮类 9.1.1 创建于窗口 9.1.2 子窗口向父窗口发送消息 9.1.3 父窗口向子窗口发送消息 9.1.4 下压按钮 9.1.5 复选框 9.1. 6 单选按钮 9.1.7 分组框 9.1.8 更改按钮文本 9.1.9 可见的和启用的按钮 9.1.10 按钮和输入焦点 9.2 控制与颜色 9.2.1 系统颜色 9.2.2 按钮颜色 9.2.3 wm_ctlcolorbtn消息 9.2.4 拥有者给制按钮 9.3 静态类 9.4 滚动条类 9. 4. 1 colors1程序 9. 4.2 自动键盘接口 9. 4. 3 窗口子类化 9.4.4 给背景着色 9.4.5 给滚动条和静态文本着色 9.5 编辑类 9.5.l 编辑类风格 9.5.2 编辑控制通知 9.5.3 使用编辑控制 9.5.4 发送给编辑控制的消息 9.6 列框类 9.6.1 列框风格 9.6.2 将串放人列框 9.6.3 选择和获取项 9.6.4 接收来自列框的消息 9.6.5 一个简单的列框应用程序 9.6.6 文件列 9.6.7 windows的head程序 第十章 菜单及其他资源 10.l 图标、光标、字符串和定制资源 10.1.1 将图标添加到程序 10.1.2 获取图标句柄 10.1.3 在程序中使用图标 10.1.4 使用自定义光标 10.1.5 字符串资源 10.1.6 定制资源 10.2 菜单 10.2.1 菜单概念 10.2.2 菜单结构 10.2.3 定义菜单 10.2.4 在程序中引用菜单 10.2. 5 菜单和消息 10.2.6 示例程序 10.2.7 菜单设计规范 10.2.8 定义菜单的复杂方法 10.2.9 浮动弹出式菜单 10.2.10 使用系统菜单 10. 2.11更改菜单 10.2.12 其他菜单命令 10.2.13 创建菜单的非正规方法 10.3 键盘加速键 10.3.1 为什么要使用加速键 10.3.2 安排加速键的几条规则 10.3.3 加速健 10.3.4 加载加速键 10.3.5 键盘代码转换 10.3.6 接收加速键消息 10.3.7 菜单与加速键应用程序poppad 10.3.8 启用菜单项 10.3.9 处理菜单项 第十一章 对话框 11.1 模态对话框 11.1.1 创建about对话框 11.1.2 对话框及其模板 11.1.3 对话框过程 11.1.4 激活对话框 11.1.5 不同的主题 11.l.6 更复杂的对话框 11.1.7 使用对话框控制 11.l.8 ok和cancel按钮 11.1.9 避免全局变量 11.1.10 tab停留位和组 11.1.11 在对话框上绘图 11.1.12 将其他函数用于对话框 11.1.13 定义自己的控制 11.2 非模态对话框 11.2.l 模态对话框与非模态对话框的区别 11.2.2 新的 colors程序 11.2.3 hexcalc:窗口还是对话框? 11.3 通用对话框 11.3.l 增强poppad 11.3.2 unicode 文件 i/o 11.3.3 更改字体 11.3.4 查找与替换 11.3.5 只调用一个函数的windows程序 第十二章 剪贴板 12.1 剪贴板的简单使用 12.1.1 标准剪贴板数据格式 12.1.2 内存分配 12.1.3 将文本传送到剪贴板 12.1.4 从剪贴板上获取文本 12.1.5 打开和关闭剪贴板 12.1.6 剪贴板和unicode 12.2 复杂的剪贴板用法 12.2.l 利用多个数据项 12.2.2 延迟生成 12.2.3 私有数据格式 12.3 实现剪贴极查看器 12.3.1 剪贴板查看器链 12.3.2 剪贴板查看器的函数和消息 12.3.3 一个简单的剪贴板查看器
内容简介   《ASP.NET 4高级程序设计(第4版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。   《ASP.NET 4高级程序设计(第4版)》适合各层次的ASP.NET程序员阅读。 作者简介 作者:(美)麦克唐纳 目录 第一部分 核心概念 第1章 ASP.NET简介 2 1.1 ASP.NET的7大要点 2 1.1.1 要点1:ASP.NET是同.NETFramework集成在一起的 2 1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 3 1.1.3 要点3:ASP.NET支持多语言 4 1.1.4 要点4:ASP.NET运行在公共语言运行内 6 1.1.5 要点5:ASP.NET是面向对象的 7 1.1.6 要点6:ASP.NET支持所有的浏览器 8 1.1.7 要点7:ASP.NET易于部署和配置 8 1.2 ASP.NET的演变 9 1.2.1 ASP.NET1.0和ASP.NET1.1 9 1.2.2  ASP.NET2.0 9 1.2.3 ASP.NET3.5 10 1.2.4 ASP.NET4 12 1.2.5 Silverlight 14 1.3 总结 15 第2章 Visual Studio 16 2.1 Visual Studio 16 2.1.1 网站和Web项目 17 2.1.2 创建无项目文件的网站 18 2.1.3 设计网页 21 2.2 Visual StudioIDE 26 2.2.1 解决方案资源管理器 28 2.2.2 文档窗口 29 2.2.3 工具箱 29 2.2.4 错误列和任务列 30 2.2.5 服务器资源管理器 31 2.3 代码编辑器 32 2.3.1 添加程序集引用 33 2.3.2 智能感知和大纲显示 35 2.3.3 Visual Studio 2010改进 37 2.4 编码模型 42 2.4.1 代码隐藏文件如何与页面连接 44 2.4.2 控件标签如何与页面变量连接 44 2.4.3 事件如何与事件处理程序连接 46 2.5 Web项目 47 2.5.1 基于项目的开发 47 2.5.2 创建Web项目 48 2.5.3 迁移旧版Visual Studio创建的网站 49 2.6 Visual Studio调试 51 2.6.1 单步调试 52 2.6.2 变量监视 54 2.6.3 高级断点 55 2.7 WebDevelopment Helper 56 2.8 总结 57 第3章 Web窗体 58 3.1 页面处理 58 3.1.1 HTML单 59 3.1.2 动态用户界面 60 3.1.3 ASP.NET事件模型 61 3.1.4 自动回送 62 3.1.5 视图状态 63 3.1.6 XHTML兼容性 66 3.1.7 客户端控件ID 71 3.2 Web窗体处理阶段 73 3.2.1 页面框架初始化 74 3.2.2 用户代码初始化 74 3.2.3 验证 74 3.2.4 事件处理 75 3.2.5 自动数据绑定 75 3.2.6 清除 76 3.2.7 页面流示例 76 3.3 作为控件容器的页面 78 3.3.1 显示控件树 78 3.3.2 页头 82 3.3.3 动态控件的创建 82 3.4 Page类 84 3.4.1 Session、Application和Cache 84 3.4.2 Request 85 3.4.3 Response 86 3.4.4 Server 88 3.4.5 User 90 3.4.6 Trace 91 3.4.7 访问其他类中的HTTP上下文 96 3.5 总结 96 第4章 服务器控件 97 4.1 服务器控件的类型 97 4.2 HTML服务器控件 99 4.2.1 HtmlControl类 100 4.2.2 HtmlContainerControl类 100 4.2.3 HtmlInputControl类 100 4.2.4 HTML服务器控件类 101 4.2.5 设置Style特性和其他属性 102 4.2.6 通过编程创建服务器控件 103 4.2.7 处理服务器端事件 104 4.3 Web控件 107 4.3.1 WebControl基类 107 4.3.2 基本的Web控件类 108 4.3.3 单位 109 4.3.4 枚举 110 4.3.5 颜色 110 4.3.6 字体 111 4.3.7 焦点 12 4.3.8 默认按钮 113 4.3.9 可滚动面板 114 4.3.10 处理Web控件事件 114 4.4 List控件 116 4.4.1 Selectable列控件 117 4.4.2 BulletedList控件 120 4.5 输入验证控件 121 4.5.1 验证控件 121 4.5.2 验证流程 122 4.5.3 BaseValidator类 122 4.5.4 RequiredFieldValidator控件 124 4.5.5 RangeValidator控件 124 4.5.6 CompareValidator控件 125 4.5.7 RegularExpressionValidator控件 125 4.5.8 CustomValidator控件 127 4.5.9 ValidationSummary控件 128 4.5.10 通过编程使用验证器 129 4.5.11 验证组 130 4.6 富控件 132 4.6.1 AdRotator控件 132 4.6.2 Calendar控件 134 4.7 总结 136 第5章 ASP.NET应用程序 137 5.1 剖析ASP.NET应用程序 137 5.1.1 应用程序域 137 5.1.2 应用程序生命周期 138 5.1.3 应用程序更新 139 5.1.4 应用程序目录结构 139 5.2 global.asax应用程序文件 140 5.2.1 应用程序事件 141 5.2.2 演示应用程序事件 143 5.3 ASP.NET配置 144 5.3.1 machine.config文件 144 5.3.2 web.config文件 147 5.3.3 设置 150 5.3.4  150 5.3.5  150 5.3.6  152 5.3.7 通过编程读写配置节 152 5.3.8 网站管理工具(WAT) 155 5.3.9 扩展配置文件结构 156 5.3.10 加密配置节 159 5.4 .NET组件 161 5.4.1 创建组件 161 5.4.2 通过App_Code目录使用组件 162 5.4.3 通过Bin目录使用组件 163 5.5 扩展HTTP管道 165 5.5.1 HTTP处理程序 165 5.5.2 创建自定义的HTTP处理程序 167 5.5.3 配置自定义的HTTP处理程序 168 5.5.4 使用无须配置的HTTP处理程序 169 5.5.5 创建高级的HTTP处理程序 169 5.5.6 为非HTML内容创建HTTP处理程序 171 5.5.7 HTTP模块 173 5.5.8 创建自定义HTTP模块 174 5.6 总结 176 第6章 状态管理 177 6.1 ASP.NET状态管理 177 6.2 视图状态 179 6.2.1 视图状态示例 180 6.2.2 在视图状态中保存对象 181 6.2.3 视图状态评估 183 6.2.4 有选择地禁用视图状态 184 6.2.5 视图状态安全 185 6.3 在页面间传送信息 186 6.3.1 查询字符串 187 6.3.2 跨页回发 188 6.4 cookie 193 6.5 会话状态 194 6.5.1 会话架构 194 6.5.2 使用会话状态 196 6.5.3 配置会话状态 197 6.5.4 会话状态安全 202 6.6 应用程序状态 203 6.7 总结 206 第二部分 数据访问 第7章 基础 208 7.1 ADO.NET架构 209 7.1.1 ADO.NET数据提供程序 209 7.1.2 ADO.NET的标准化 210 7.1.3 基本ADO.NET类 211 7.2 Connection类 212 7.2.1 连接字符串 212 7.2.2 测试连接 214 7.2.3 连接池 215 7.3 Command类和DataReader类 217 7.3.1 Command基础 217 7.3.2 DataReader类 218 7.3.3  ExecuteReader()方法和DataReader 218 7.3.4 ExecuteScalar()方法 223 7.3.5 ExecuteNonQuery()方法 223 7.3.6 SQL注入攻击 224 7.3.7 使用参数化命令 226 7.3.8 调用存储过程 227 7.4 事务 229 7.4.1 事务和ASP.NET应用程序 230 7.4.2 隔离级别 234 7.4.3 保存点 235 7.5 提供程序无关的代码 235 7.5.1 创建工厂 236 7.5.2 用工厂创建对象 237 7.5.3 使用提供程序无关的代码的查询 237 7.6 总结 239 第8章 数据组件和DataSet 240 8.1 构建数据访问组件 240 8.1.1 数据包 241 8.1.2 存储过程 242 8.1.3 数据应用类 243 8.1.4 测试数据组件 248 8.2 非连接的数据 249 8.2.1 Web应用程序和DataSet 250 8.2.2 XML集成 251 8.3 DataSet类 251 8.4  DataAdapter类 252 8.4.1 填充DataSet 253 8.4.2 使用多个和关系 254 8.4.3 查找特定行 257 8.4.4 在数据访问类里使用DataSet 257 8.4.5 数据绑定 258 8.5 DataView类 259 8.5.1 使用DataView排序 259 8.5.2 使用DataView过滤 261 8.5.3 使用关系的高级过滤 262 8.5.4 计算列 263 8.6 总结 264 第9章 数据绑定 265 9.1 基本的数据绑定 265 9.1.1 单值绑定 266 9.1.2 其他类型达式 268 9.1.3 重复值绑定 271 9.2 数据源控件 277 9.3 SqlDataSource 278 9.3.1 选择记录 279 9.3.2 参数化命令 281 9.3.3 错误处理 285 9.3.4 更新记录 286 9.3.5 删除记录 289 9.3.6 插入记录 289 9.3.7 SqlDataSource的不足 290 9.4 ObjectDataSource 291 9.4.1 选择记录 291 9.4.2 更新记录 295 9.4.3 使用数据对象执行更新 296 9.5 数据源控件的限制 299 9.5.1 问题 299 9.5.2 添加其他项 300 9.5.3 使用SqlDataSource处理其他选项 301 9.5.4 使用ObjectDataSource处理其他选项 301 9.6 总结 302 第10章 富数据控件 303 10.1 GridView 303 10.2 格式化GridView 307 10.2.1 格式化字段 307 10.2.2 样式 308 10.2.3 格式化特定值 311 10.3 GridView行选择 313 10.3.1 使用选择来创建主-从单 314 10.3.2 SelectedIndexChanged事件 315 10.3.3 将数据字段用作选择按钮 315 10.4 对GridView排序 316 10.4.1 使用SqlDataSource排序 317 10.4.2 使用ObjectDataSource排序 318 10.4.3 排序和选择 319 10.4.4 高级排序 319 10.5 GridView分页 320 10.5.1 自动分页 320 10.5.2 分页和选择 322 10.5.3 ObjectDataSource的自定义分页 322 10.5.4 定制分页栏 324 10.6 GridView模板 325 10.6.1 使用多个模板 327 10.6.2 在Visual Studio中编辑模板 328 10.6.3 绑定到方法 328 10.6.4 处理模板中的事件 330 10.6.5 使用模板编辑 330 10.6.6 模板中的客户端ID 335 10.7 ListView 336 10.7.1 分组 338 10.7.2 分页 340 10.8 DetailsView和FormView 341 10.8.1 DetailsView 341 10.8.2 FormView 344 10.9 高级网格 345 10.9.1 GridView中的汇总 345 10.9.2 单个中的父/子视图 347 10.9.3 使用查找编辑字段 349 10.9.4 处理来自数据的图片 351 10.9.5 探测并发冲突 355 10.10 总结 359 第11章 缓存和异步页面 360 11.1 理解ASP.NET缓存 360 11.2 输出缓存 361 11.2.1 声明性的输出缓存 361 11.2.2 缓存和查询字符串 362 11.2.3 使用特定查询字符串参数的缓存 363 11.2.4 自定义缓存控制 364 11.2.5 使用HttpCachePolicy类进行缓存 365 11.2.6 缓存后替换和部分页缓存 365 11.2.7 缓存用户配置 367 11.2.8 缓存配置 368 11.2.9 输出缓存扩展 369 11.3 数据缓存 373 11.3.1 向缓存添加项目 373 11.3.2 简单的缓存测试 375 11.3.3 缓存优先级 376 11.3.4 使用数据源控件的缓存 376 11.4 缓存依赖 379 11.4.1 文件和缓存项目依赖 379 11.4.2 聚合依赖 380 11.4.3 移除项目回调 381 11.4.4 理解SQL缓存通知 383 11.4.5 缓存通知的工作方式 384 11.4.6 启用通知 384 11.4.7 创建缓存依赖 385 11.5 自定义缓存依赖 386 11.5.1 基本的自定义缓存依赖 386 11.5.2 使用消息队列的自定义缓存依赖 387 11.6 异步页面 389 11.6.1 创建异步页面 390 11.6.2 在异步页面中查询数据 392 11.6.3 错误处理 393 11.6.4 在异步任务中使用缓存 395 11.6.5 多异步任务和超时 397 11.7 总结 399 第12章 文件和流 400 12.1 使用文件系统 400 12.1.1 Directory类和File类 400 12.1.2 DirectoryInfo类和FileInfo类 402 12.1.3 DriveInfo类 404 12.1.4 使用Attributes 405 12.1.5 使用通配符过滤文件 407 12.1.6 获取文件的版本信息 407 12.1.7 Path类 408 12.1.8 文件浏览器 410 12.2 使用流读写文件 414 12.2.1 文本文件 415 12.2.2 二进制文件 416 12.2.3 上传文件 417 12.2.4 使文件对多用户安全 419 12.2.5 压缩 423 12.3 序列化 423 12.4 总结 426 第13章 LINQ 427 13.1 LINQ基础 427 13.1.1 延迟执行 429 13.1.2 LINQ是如何工作的 429 13.1.3 LINQ达式 430 13.1.4 揭秘LINQ达式 436 13.2 LINQ to DataSet 439 13.2.1 强类型的DataSet 441 13.2.2 空值 441 13.3 LINQ to Entities 441 13.3.1 生成数据模型 442 13.3.2 数据模型类 442 13.3.3 实体关系 444 13.3.4 查询存储过程 446 13.3.5 LINQ to Entities查询揭秘 447 13.4 数据操作 452 13.4.1 插入 452 13.4.2 更新 454 13.4.3 删除 454 13.4.4 管理并发 455 13.4.5 处理并发冲突 455 13.5 EntityDataSource控件 459 13.5.1 显示数据 459 13.5.2 获取关联数据 463 13.5.3 编辑数据 464 13.5.4 验证 464 13.6 使用QueryExtender控件 465 13.6.1 使用SearchExperssion 466 13.6.2 使用RangeExpression 467 13.6.3 使用PropertyExpression 467 13.6.4 使用MethodExpression 468 13.7 总结 468 第14章 XML 470 14.1 什么时候使用XML 470 14.2 XML简介 471 14.2.1 XML的优点 472 14.2.2 格式良好的XML 472 14.2.3 XML命名空间 473 14.2.4 XML架构 474 14.3 基于流的XML处理 475 14.3.1 写XML文件 476 14.3.2 读取XML文件 478 14.4 内存中的XML处理 481 14.4.1 XmlDocument 482 14.4.2 XPathNavigator 485 14.4.3 XDocument 486 14.5 搜索XML内容 491 14.5.1 搜索XmlDocument 491 14.5.2 使用XPath搜索XmlDocument 493 14.5.3 使用LINQ搜索XDocument 494 14.6 验证XML内容 496 14.6.1 基本架构 496 14.6.2 验证XmlDocument 497 14.6.3 使用XDocument进行验证 498 14.7 转换XML内容 499 14.7.1 基本的样式 499 14.7.2 使用XslCompiledTransform 500 14.7.3 使用Xml控件 501 14.7.4 使用LINQ to XML转换XML 502 14.8 XML数据绑定 504 14.8.1 非层次化绑定 504 14.8.2 使用XPath 506 14.8.3 嵌套的网格 508 14.8.4 使用TreeView的层次化绑定 509 14.8.5 使用XSLT 511 14.8.6 绑定到来自其他源的XML内容 512 14.8.7 通过XmlDataSource更新XML 513 14.9 XML和ADO.NET数据集 513 14.9.1 把DataSet转换为XML 514 14.9.2 把DataSet作为XML访问 515 14.10 总结 517 第三部分 构建ASP.NET网站 第15章 用户控件 520 15.1 用户控件基础 520 15.1.1 创建简单的用户控件 521 15.1.2 把页面转换成用户控件 522 15.2 为用户控件添加代码 523 15.2.1 处理事件 523 15.2.2 添加属性 524 15.2.3 使用自定义对象 525 15.2.4 添加事件 528 15.2.5 公开内部Web控件 530 15.3 动态加载用户控件 531 15.4 局部页面缓存 534 15.4.1 VaryByControl 535 15.4.2 共享缓存控件 536 15.5 总结 537 第16章 主题和母版页 538 16.1 层叠样式 538 16.1.1 创建样式 538 16.1.2 应用样式规则 540 16.2 主题 542 16.2.1 主题文件夹和外观 543 16.2.2 应用简单主题 544 16.2.3 处理主题冲突 545 16.2.4 为同一控件创建多个外观 546 16.2.5 含有模板和图片的外观 547 16.2.6 在主题里使用CSS 549 16.2.7 通过配置文件来应用主题 549 16.2.8 动态应用主题 550 16.3 标准化网站布局 551 16.4 母版页基础 552 16.4.1 简单的母版页 552 16.4.2 简单的内容页 554 16.4.3 默认内容 556 16.4.4 具有格和CSS布局的母版页 556 16.4.5 母版页和相对路径 559 16.4.6 通过配置文件应用母版页 559 16.5 高级母版页 560 16.5.1 和母版页类交互 560 16.5.2 动态设置母版页 561 16.5.3 嵌套母版页 561 16.6 总结 563 第17章 网站导航 564 17.1 多视图页面 564 17.1.1 MultiView控件 565 17.1.2 Wizard控件 568 17.2 站点地图 575 17.2.1 定义站点地图 576 17.2.2 绑定站点地图 577 17.2.3 导航路径 578 17.2.4 显示站点地图的一部分 580 17.2.5 站点地图对象 583 17.2.6 加入自定义站点地图信息 584 17.2.7 创建自定义的SiteMapProvider 584 17.2.8 安全调整 590 17.3 URL映射和路由 592 17.3.1 URL映射 592 17.3.2 URL路由 593 17.4 TreeView控件 594 17.4.1 TreeNode 595 17.4.2 按需填充节点 597 17.4.3 TreeView样式 598 17.5 Menu控件 601 17.5.1 Menu样式 603 17.5.2 Menu模板 605 17.6 总结 606 第18章 网站部署 607 18.1 安装和配置IIS 607 18.1.1 安装IIS 7 607 18.1.2 管理IIS 7 608 18.2 部署网站 610 18.2.1 通过复制文件进行部署 611 18.2.2 使用Web部署 614 18.2.3 通过FTP部署 621 18.3 管理网站 626 18.3.1 创建新站点 626 18.3.2 创建虚拟目录 627 18.3.3 使用VirtualPathProvider 628 18.3.4 使用应用程序池 631 18.3.5 使用应用程序预热 633 18.4 扩展集成管道 634 18.4.1 创建处理程序 634 18.4.2 部署处理程序 635 18.4.3 配置处理程序 635 18.4.4 测试处理程序 636 18.5 总结 636 第四部分 安全 第19章 ASP.NET安全模型 638 19.1 为何创建安全软件 638 19.1.1 理解潜在的威胁 638 19.1.2 安全编程原则 639 19.1.3 理解Gatekeeper 640 19.2 理解安全级别 641 19.2.1 验证 641 19.2.2 授权 642 19.2.3 机密性和完整性 643 19.2.4 互相协作 643 19.3 理解SSL 644 19.3.1 理解证书 645 19.3.2 理解SSL 645 19.3.3 在IIS 7.x中配置SSL 646 19.4 总结 649 第20章 单验证 650 20.1 单验证介绍 650 20.1.1 为什么使用单验证 650 20.1.2 为什么不使用单验证 652 20.1.3 为什么不自己实现cookie验证 653 20.1.4 单验证类 654 20.2 实现单验证 655 20.2.1 配置单验证 655 20.2.2 禁止匿名用户访问 657 20.2.3 创建自定义登录页面 658 20.2.4 自定义凭证存储 662 20.2.5 单验证中的持久化cookie 663 20.3 IIS 7.x和单验证 665 20.4 总结 669 第21章 成员资格 670 21.1 介绍ASP.NET的成员资格API 670 21.2 使用成员资格API 672 21.2.1 配置单验证 673 21.2.2 创建数据存储 674 21.2.3 配置连接字符串和成员资格提供程序 679 21.2.4 创建并验证用户 681 21.3 使用安全控件 683 21.3.1 Login控件 684 21.3.2 LoginStatus控件 693 21.3.3 LoginView控件 693 21.3.4 PasswordRecovery控件 694 21.3.5 ChangePassword控件 697 21.3.6 CreateUserWizard控件 698 21.4 在IIS 7.x里配置成员资格 702 21.4.1 配置提供程序和用户 702 21.4.2 在其他应用程序里使用成员资格API 703 21.5 使用Membership类 705 21.5.1 从存储中获得用户 706 21.5.2 更新存储中的用户 708 21.5.3 创建和删除用户 708 21.5.4 检验用户 709 21.6 总结 709 第22章 Windows验证 710 22.1 介绍Windows验证 710 22.1.1 为什么使用Windows验证 710 22.1.2 为什么不使用Windows验证 711 22.1.3 Windows验证机制 712 22.2 实现Windows验证 717 22.2.1 配置IIS 7.x 717 22.2.2 配置ASP.NET 718 22.2.3 IIS 7.x管道 719 22.2.4 禁止匿名用户访问 722 22.2.5 访问Windows用户信息 723 22.3 身份模拟 727 22.3.1 Windows中的身份模拟和委托 728 22.3.2 经过配置的身份模拟 729 22.3.3 可编程的身份模拟 729 22.4 总结 732 第23章 授权和角色 733 23.1 URL 授权 733 23.2 文件授权 738 23.3 在代码中检查授权 739 23.3.1 使用IsInRole()方法 739 23.3.2 使用PrincipalPermission类 740 23.4 为基于角色的授权使用角色API 742 23.4.1 和角色一起使用LoginView控件 747 23.4.2 通过编程访问角色 748 23.4.3 在Windows验证中使用角色API 750 23.5 IIS 7.x里的授权和角色 752 23.5.1 在IIS 7.x里使用ASP.NET角色授权 754 23.5.2 在IIS 7.x中管理ASP.NET角色 756 23.6 总结 757 第24章 用户配置 758 24.1 理解用户配置 758 24.1.1 用户配置的性能 758 24.1.2 用户配置如何存储数据 759 24.1.3 用户配置和验证 760 24.1.4 用户配置与自定义的数据组件 760 24.2 使用SqlProfileProvider 761 24.2.1 创建用户配置 761 24.2.2 配置提供程序 763 24.2.3 定义用户配置属性 764 24.2.4 使用用户配置属性 764 24.2.5 用户配置序列化 766 24.2.6 用户配置组 767 24.2.7 用户配置和自定义的数据类型 768 24.2.8 用户配置API 771 24.2.9 匿名用户配置 773 24.3 自定义用户配置提供程序 775 24.3.1 自定义用户配置提供程序类 775 24.3.2 设计FactoredProfileProvider 777 24.3.3 通过编码实现FactoredProfileProvider 778 24.3.4 测试FactoredProfileProvider 781 24.4 总结 784 第25章 加密 785 25.1 加密数据:机密性问题 785 25.2 .NET加密命名空间 786 25.3 理解.NET加密类 789 25.3.1 对称加密算法 790 25.3.2 非对称加密 791 25.3.3 抽象加密类 791 25.3.4 ICryptoTransform接口 792 25.3.5 CryptoStream类 793 25.4 加密敏感数据 793 25.4.1 管理秘密信息 794 25.4.2 使用对称算法 795 25.4.3 使用非对称算法 799 25.4.4 加密数据中的敏感数据 801 25.5 加密查询字符串 806 25.5.1 包装查询字符串 806 25.5.2 创建一个测试页面 808 25.6 总结 810 第26章 自定义成员资格提供程序 811 26.1 自定义提供程序的架构 811 26.2 创建自定义提供程序的基本步骤 812 26.2.1 自定义提供程序的总体设计 813 26.2.2 设计并实现自定义存储 813 26.2.3 实现提供程序类 820 26.2.4 使用自定义提供程序类 837 26.3 总结 840 第五部分 高级用户界面 第27章 自定义服务器控件 842 27.1 自定义服务器控件入门 842 27.1.1 创建简单的自定义控件 842 27.1.2 使用自定义控件 844 27.1.3 工具箱中的自定义控件 845 27.1.4 创建支持样式属性的Web控件 847 27.1.5 呈现过程 850 27.2 处理不同的浏览器 852 27.2.1 HtmlTextWriter 852 27.2.2 浏览器检测 852 27.2.3 浏览器属性 853 27.2.4 覆盖浏览器类型侦测 854 27.2.5 自适应呈现 855 27.3 控件状态和事件 856 27.3.1 视图状态 856 27.3.2 控件状态 858 27.3.3 回传数据和change事件 860 27.3.4 触发回传 862 27.4 扩展现有的Web控件 863 27.4.1 组合控件 864 27.4.2 派生控件 866 27.5 总结 869 第28章 图形、GDI+和图 870 28.1 ImageMap控件 870 28.1.1 创建热点 871 28.1.2 处理热点单击 872 28.1.3 自定义热点 873 28.2 使用GDI+画图 875 28.2.1 简单绘制 875 28.2.2 图像格式和质量 877 28.2.3 Graphics类 878 28.2.4 使用GraphicsPath 880 28.2.5 画笔 881 28.2.6 画刷 883 28.3 在网页上嵌入动态图形 885 28.3.1 使用PNG格式 885 28.3.2 传递信息给动态图像 886 28.3.3 使用GDI+的自定义控件 888 28.4 使用Chart控件 892 28.4.1 创建基本的图 892 28.4.2 用数据填充图 897 28.5 总结 904 第29章 JavaScript和Ajax技术 905 29.1 JavaScript本质 905 29.1.1 HTML DOM 906 29.1.2 客户端事件 906 29.1.3 脚本块 908 29.1.4 操纵HTML元素 910 29.1.5 调试JavaScript 910 29.2 基本的JavaScript示例 912 29.2.1 创建JavaScript页面处理器 912 29.2.2 使用JavaScript异步下载图片 915 29.2.3 呈现脚本块 919 29.3 脚本注入攻击 920 29.3.1 请求验证 921 29.3.2 禁用请求验证 922 29.3.3 扩展请求验证 923 29.4 带有JavaScript的自定义控件 925 29.4.1 弹出窗口 925 29.4.2 滚动按钮 928 29.5 框架 931 29.5.1 框架导航 932 29.5.2 内联框架 933 29.6 理解Ajax 934 29.6.1 XMLHttpRequest对象 935 29.6.2 Ajax示例 936 29.7 在客户端回调中使用Ajax 939 29.7.1 创建客户端回调 940 29.7.2 深入了解客户端回调 945 29.7.3 自定义控件里的客户端回调 946 29.8 总结 949 第30章 ASP.NETAJAX 950 30.1 介绍ASP.NETAJAX 950 30.1.1 客户端的ASP.NETAJAX:脚本 951 30.1.2 服务器端的ASP.NETAJAX:ScriptManager 952 30.2 服务器回调 952 30.2.1 ASP.NETAJAX中的Web服务 953 30.2.2 在页面里放置Web方法 959 30.2.3 ASP.NETAJAX应用程序服务 960 30.3 ASP.NETAJAX服务器控件 966 30.3.1 使用UpdatePanel的局部呈现 966 30.3.2 使用Timer的定时刷新 973 30.3.3 使用UpdateProgress的耗时更新 974 30.3.4 管理浏览器历史 976 30.4 深入客户端 979 30.4.1 理解客户端模型 980 30.4.2 JavaScript的面向对象编程 981 30.4.3 网页框架 987 30.5 控件扩展器 991 30.5.1 安装ASP.NETAJAX控件工具包 992 30.5.2 AutoCompleteExtender 993 30.5.3 ASP.NETAJAX控件工具包 996 30.6 总结 999 第31章 使用Web部件页面的门户网站 1000 31.1 典型门户页面 1000 31.2 基本Web部件页面 1002 31.2.1 创建页面设计 1002 31.2.2 WebPartManager和WebPartZone 1003 31.2.3 向页面添加Web部件 1004 31.2.4 定制页面 1008 31.3 创建Web部件 1010 31.3.1 简单的Web部件任务 1010 31.3.2 开发高级Web部件 1017 31.3.3 Web部件编辑器 1024 31.3.4 连接Web部件 1029 31.3.5 自定义动词和Web部件 1036 31.3.6 用户控件和高级Web部件 1037 31.3.7 动态上传Web部件 1040 31.3.8 对Web部件的授权 1044 31.3.9 个性化的最后任务 1045 31.4 总结 1046 第32章 MVC 1047 32.1 MVC和Web单的选择 1047 32.2 创建基本的MVC应用程序 1047 32.2.1 创建模型 1048 32.2.2 创建控制器 1049 32.2.3 创建Index视图 1050 32.2.4 测试(未完成的)应用程序 1050 32.2.5 完成控制器和视图 1051 32.2.6 修改Site.Master文件 1053 32.3 扩展基础的MVC应用程序 1053 32.3.1 配置路由 1054 32.3.2 增加错误处理 1055 32.3.3 增加验证 1056 32.3.4 增强数据存储访问 1057 32.3.5 增加对外键约束的支持 1059 32.4 自定义视图 1059 32.4.1 修改视图 1060 32.4.2 增加视图数据 1062 32.5 强化模型 1063 32.6 验证数据 1066 32.6.1 执行基本的验证 1067 32.6.2 增加验证标注 1068 32.7 使用动作结果 1071 32.7.1 返回JSON数据 1072 32.7.2 调用其他控制器方法 1072 32.8 总结 1074 第33章 动态数据 1075 33.1 创建动态数据应用程序 1075 33.1.1 创建动态数据网站 1075 33.1.2 检验动态数据网站 1077 33.2 深入理解动态数据项目 1080 33.3 自定义动态数据网站 1080 33.3.1 使用模板进行自定义 1081 33.3.2 使用路由进行自定义 1087 33.3.3 使用元数据进行自定义 1094 33.3.4 自定义验证 1099 33.4 总结 1103 第34章 Silverlight 1104 34.1 理解Silverlight 1105 34.1.1 Silverlight与Flash对比 1106 34.1.2 Silverlight系统需求 1107 34.2 创建Silverlight解决方案 1108 34.2. 1 Silverlight编译 1109 34.2.2 入口页面 1110 34.3 创建Silverlight项目 1114 34.3.1 设计Silverlight页面 1114 34.3.2 理解XAML 1117 34.3.3 设置属性 1118 34.3.4 XAML 代码隐藏 1119 34.3.5 处理事件 1120 34.3.6 了解Silverlight类 1121 34.4 布局 1122 34.4.1 Canvas 1123 34.4.2 网格 1127 34.5 动画 1131 34.5.1 动画基础知识 1132 34.5.2 定义动画 1132 34.5.3 StoryBoard类 1133 34.5.4 交互式动画实例 1135 34.5.5 变换 1138 34.6 Silverlight使用Web服务 1141 34.6.1 创建Web服务 1141 34.6.2 添加Web引用 1142 34.6.3 调用Web服务 1143 34.6.4 配置Web服务URL 1144 34.6.5 跨域Web服务调用 1144 34.7 总结 1146
手动优化了PDF的书签,书签可折叠,书签链接以目录方式保存,多达1000多页,每页都做了书签定位,手都累酸啦。 ============================== 因权限只能到60MB,分卷压缩了,共3个压缩包,需下载完3个一起解压, ============================== ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。   《ASP.NET 4高级程序设计(第4版)》适合各层次的ASP.NET程序员阅读。 =================== 第一部分 核心概念 第1章 ASP.NET简介 1.1 ASP.NET的7大要点 1.1.1 要点1:ASP.NET是同.NETFramework集成在一起的 1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 1.1.3 要点3:ASP.NET支持多语言 1.1.4 要点4:ASP.NET运行在公共语言运行内 1.1.5 要点5:ASP.NET是面向对象的 1.1.6 要点6:ASP.NET支持所有的浏览器 1.1.7 要点7:ASP.NET易于部署和配置 1.2 ASP.NET的演变 1.2.1 ASP.NET1.0和ASP.NET1.1 1.2.2  ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目 2.1.2 创建无项目文件的网站 2.1.3 设计网页 2.2 Visual StudioIDE 2.2.1 解决方案资源管理器 2.2.2 文档窗口 2.2.3 工具箱 2.2.4 错误列和任务列 2.2.5 服务器资源管理器 2.3 代码编辑器 2.3.1 添加程序集引用 2.3.2 智能感知和大纲显示 2.3.3 Visual Studio 2010改进 2.4 编码模型 2.4.1 代码隐藏文件如何与页面连接 2.4.2 控件标签如何与页面变量连接 2.4.3 事件如何与事件处理程序连接 2.5 Web项目 2.5.1 基于项目的开发 2.5.2 创建Web项目 2.5.3 迁移旧版Visual Studio创建的网站 2.6 Visual Studio调试 2.6.1 单步调试 2.6.2 变量监视 2.6.3 高级断点 2.7 WebDevelopment Helper 2.8 总结 第3章 Web窗体 3.1 页面处理 3.1.1 HTML单 3.1.2 动态用户界面 3.1.3 ASP.NET事件模型 3.1.4 自动回送 3.1.5 视图状态 3.1.6 XHTML兼容性 3.1.7 客户端控件ID 3.2 Web窗体处理阶段 3.2.1 页面框架初始化 3.2.2 用户代码初始化 3.2.3 验证 3.2.4 事件处理 3.2.5 自动数据绑定 3.2.6 清除 3.2.7 页面流示例 3.3 作为控件容器的页面 3.3.1 显示控件树 3.3.2 页头 3.3.3 动态控件的创建 3.4 Page类 3.4.1 Session、Application和Cache 3.4.2 Request 3.4.3 Response 3.4.4 Server 3.4.5 User 3.4.6 Trace 3.4.7 访问其他类中的HTTP上下文 3.5 总结 第4章 服务器控件 4.1 服务器控件的类型 4.2 HTML服务器控件 4.2.1 HtmlControl类 4.2.2 HtmlContainerControl类 4.2.3 HtmlInputControl类 4.2.4 HTML服务器控件类 4.2.5 设置Style特性和其他属性 4.2.6 通过编程创建服务器控件 4.2.7 处理服务器端事件 4.3 Web控件 4.3.1 WebControl基类 4.3.2 基本的Web控件类 4.3.3 单位 4.3.4 枚举 4.3.5 颜色 4.3.6 字体 4.3.7 焦点 4.3.8 默认按钮 4.3.9 可滚动面板 4.3.10 处理Web控件事件 4.4 List控件 4.4.1 Selectable列控件 4.4.2 BulletedList控件 4.5 输入验证控件 4.5.1 验证控件 4.5.2 验证流程 4.5.3 BaseValidator类 4.5.4 RequiredFieldValidator控件 4.5.5 RangeValidator控件 4.5.6 CompareValidator控件 4.5.7 RegularExpressionValidator控件 4.5.8 CustomValidator控件 4.5.9 ValidationSummary控件 4.5.10 通过编程使用验证器 4.5.11 验证组 4.6 富控件 4.6.1 AdRotator控件 4.6.2 Calendar控件 4.7 总结 第5章 ASP.NET应用程序 5.1 剖析ASP.NET应用程序 5.1.1 应用程序域 5.1.2 应用程序生命周期 5.1.3 应用程序更新 5.1.4 应用程序目录结构 5.2 global.asax应用程序文件 5.2.1 应用程序事件 5.2.2 演示应用程序事件 5.3 ASP.NET配置 5.3.1 machine.config文件 5.3.2 web.config文件 5.3.3 设置 5.3.4 5.3.5 5.3.6 5.3.7 通过编程读写配置节 5.3.8 网站管理工具(WAT) 5.3.9 扩展配置文件结构 5.3.10 加密配置节 5.4 .NET组件 5.4.1 创建组件 5.4.2 通过App_Code目录使用组件 5.4.3 通过Bin目录使用组件 5.5 扩展HTTP管道 5.5.1 HTTP处理程序 5.5.2 创建自定义的HTTP处理程序 5.5.3 配置自定义的HTTP处理程序 5.5.4 使用无须配置的HTTP处理程序 5.5.5 创建高级的HTTP处理程序 5.5.6 为非HTML内容创建HTTP处理程序 5.5.7 HTTP模块 5.5.8 创建自定义HTTP模块 5.6 总结 第6章 状态管理 6.1 ASP.NET状态管理 6.2 视图状态 6.2.1 视图状态示例 6.2.2 在视图状态中保存对象 6.2.3 视图状态评估 6.2.4 有选择地禁用视图状态 6.2.5 视图状态安全 6.3 在页面间传送信息 6.3.1 查询字符串 6.3.2 跨页回发 6.4 cookie 6.5 会话状态 6.5.1 会话架构 6.5.2 使用会话状态 6.5.3 配置会话状态 6.5.4 会话状态安全 6.6 应用程序状态 6.7 总结 第二部分 数据访问 第7章 基础 7.1 ADO.NET架构 7.1.1 ADO.NET数据提供程序 7.1.2 ADO.NET的标准化 7.1.3 基本ADO.NET类 7.2 Connection类 7.2.1 连接字符串 7.2.2 测试连接 7.2.3 连接池 7.3 Command类和DataReader类 7.3.1 Command基础 7.3.2 DataReader类 7.3.3  ExecuteReader()方法和DataReader 7.3.4 ExecuteScalar()方法 7.3.5 ExecuteNonQuery()方法 7.3.6 SQL注入攻击 7.3.7 使用参数化命令 7.3.8 调用存储过程 7.4 事务 7.4.1 事务和ASP.NET应用程序 7.4.2 隔离级别 7.4.3 保存点 7.5 提供程序无关的代码 7.5.1 创建工厂 7.5.2 用工厂创建对象 7.5.3 使用提供程序无关的代码的查询 7.6 总结 第8章 数据组件和DataSet 8.1 构建数据访问组件 8.1.1 数据包 8.1.2 存储过程 8.1.3 数据应用类 8.1.4 测试数据组件 8.2 非连接的数据 8.2.1 Web应用程序和DataSet 8.2.2 XML集成 8.3 DataSet类 8.4  DataAdapter类 8.4.1 填充DataSet 8.4.2 使用多个和关系 8.4.3 查找特定行 8.4.4 在数据访问类里使用DataSet 8.4.5 数据绑定 8.5 DataView类 8.5.1 使用DataView排序 8.5.2 使用DataView过滤 8.5.3 使用关系的高级过滤 8.5.4 计算列 8.6 总结 第9章 数据绑定 9.1 基本的数据绑定 9.1.1 单值绑定 9.1.2 其他类型达式 9.1.3 重复值绑定 9.2 数据源控件 9.3 SqlDataSource 9.3.1 选择记录 9.3.2 参数化命令 9.3.3 错误处理 9.3.4 更新记录 9.3.5 删除记录 9.3.6 插入记录 9.3.7 SqlDataSource的不足 9.4 ObjectDataSource 9.4.1 选择记录 9.4.2 更新记录 9.4.3 使用数据对象执行更新 9.5 数据源控件的限制 9.5.1 问题 9.5.2 添加其他项 9.5.3 使用SqlDataSource处理其他选项 9.5.4 使用ObjectDataSource处理其他选项 9.6 总结 第10章 富数据控件 10.1 GridView 10.2 格式化GridView 10.2.1 格式化字段 10.2.2 样式 10.2.3 格式化特定值 10.3 GridView行选择 10.3.1 使用选择来创建主-从单 10.3.2 SelectedIndexChanged事件 10.3.3 将数据字段用作选择按钮 10.4 对GridView排序 10.4.1 使用SqlDataSource排序 10.4.2 使用ObjectDataSource排序 10.4.3 排序和选择 10.4.4 高级排序 10.5 GridView分页 10.5.1 自动分页 10.5.2 分页和选择 10.5.3 ObjectDataSource的自定义分页 10.5.4 定制分页栏 10.6 GridView模板 10.6.1 使用多个模板 10.6.2 在Visual Studio中编辑模板 10.6.3 绑定到方法 10.6.4 处理模板中的事件 10.6.5 使用模板编辑 10.6.6 模板中的客户端ID 10.7 ListView 10.7.1 分组 10.7.2 分页 10.8 DetailsView和FormView 10.8.1 DetailsView 10.8.2 FormView 10.9 高级网格 10.9.1 GridView中的汇总 10.9.2 单个中的父/子视图 10.9.3 使用查找编辑字段 10.9.4 处理来自数据的图片 10.9.5 探测并发冲突 10.10 总结 第11章 缓存和异步页面 11.1 理解ASP.NET缓存 11.2 输出缓存 11.2.1 声明性的输出缓存 11.2.2 缓存和查询字符串 11.2.3 使用特定查询字符串参数的缓存 11.2.4 自定义缓存控制 11.2.5 使用HttpCachePolicy类进行缓存 11.2.6 缓存后替换和部分页缓存 11.2.7 缓存用户配置 11.2.8 缓存配置 11.2.9 输出缓存扩展 11.3 数据缓存 11.3.1 向缓存添加项目 11.3.2 简单的缓存测试 11.3.3 缓存优先级 11.3.4 使用数据源控件的缓存 11.4 缓存依赖 11.4.1 文件和缓存项目依赖 11.4.2 聚合依赖 11.4.3 移除项目回调 11.4.4 理解SQL缓存通知 11.4.5 缓存通知的工作方式 11.4.6 启用通知 11.4.7 创建缓存依赖 11.5 自定义缓存依赖 11.5.1 基本的自定义缓存依赖 11.5.2 使用消息队列的自定义缓存依赖 11.6 异步页面 11.6.1 创建异步页面 11.6.2 在异步页面中查询数据 11.6.3 错误处理 11.6.4 在异步任务中使用缓存 11.6.5 多异步任务和超时 11.7 总结 第12章 文件和流 12.1 使用文件系统 12.1.1 Directory类和File类 12.1.2 DirectoryInfo类和FileInfo类 12.1.3 DriveInfo类 12.1.4 使用Attributes 12.1.5 使用通配符过滤文件 12.1.6 获取文件的版本信息 12.1.7 Path类 12.1.8 文件浏览器 12.2 使用流读写文件 12.2.1 文本文件 12.2.2 二进制文件 12.2.3 上传文件 12.2.4 使文件对多用户安全 12.2.5 压缩 12.3 序列化 12.4 总结 第13章 LINQ 13.1 LINQ基础 13.1.1 延迟执行 13.1.2 LINQ是如何工作的 13.1.3 LINQ达式 13.1.4 揭秘LINQ达式 13.2 LINQ to DataSet 13.2.1 强类型的DataSet 13.2.2 空值 13.3 LINQ to Entities 13.3.1 生成数据模型 13.3.2 数据模型类 13.3.3 实体关系 13.3.4 查询存储过程 13.3.5 LINQ to Entities查询揭秘 13.4 数据操作 13.4.1 插入 13.4.2 更新 13.4.3 删除 13.4.4 管理并发 13.4.5 处理并发冲突 13.5 EntityDataSource控件 13.5.1 显示数据 13.5.2 获取关联数据 13.5.3 编辑数据 13.5.4 验证 13.6 使用QueryExtender控件 13.6.1 使用SearchExperssion 13.6.2 使用RangeExpression 13.6.3 使用PropertyExpression 13.6.4 使用MethodExpression 13.7 总结 第14章 XML 14.1 什么时候使用XML 14.2 XML简介 14.2.1 XML的优点 14.2.2 格式良好的XML 14.2.3 XML命名空间 14.2.4 XML架构 14.3 基于流的XML处理 14.3.1 写XML文件 14.3.2 读取XML文件 14.4 内存中的XML处理 14.4.1 XmlDocument 14.4.2 XPathNavigator 14.4.3 XDocument 14.5 搜索XML内容 14.5.1 搜索XmlDocument 14.5.2 使用XPath搜索XmlDocument 14.5.3 使用LINQ搜索XDocument 14.6 验证XML内容 14.6.1 基本架构 14.6.2 验证XmlDocument 14.6.3 使用XDocument进行验证 14.7 转换XML内容 14.7.1 基本的样式 14.7.2 使用XslCompiledTransform 14.7.3 使用Xml控件 14.7.4 使用LINQ to XML转换XML 14.8 XML数据绑定 14.8.1 非层次化绑定 14.8.2 使用XPath 14.8.3 嵌套的网格 14.8.4 使用TreeView的层次化绑定 14.8.5 使用XSLT 14.8.6 绑定到来自其他源的XML内容 14.8.7 通过XmlDataSource更新XML 14.9 XML和ADO.NET数据集 14.9.1 把DataSet转换为XML 14.9.2 把DataSet作为XML访问 14.10 总结 第三部分 构建ASP.NET网站 第15章 用户控件 15.1 用户控件基础 15.1.1 创建简单的用户控件 15.1.2 把页面转换成用户控件 15.2 为用户控件添加代码 15.2.1 处理事件 15.2.2 添加属性 15.2.3 使用自定义对象 15.2.4 添加事件 15.2.5 公开内部Web控件 15.3 动态加载用户控件 15.4 局部页面缓存 15.4.1 VaryByControl 15.4.2 共享缓存控件 15.5 总结 第16章 主题和母版页 16.1 层叠样式 16.1.1 创建样式 16.1.2 应用样式规则 16.2 主题 16.2.1 主题文件夹和外观 16.2.2 应用简单主题 16.2.3 处理主题冲突 16.2.4 为同一控件创建多个外观 16.2.5 含有模板和图片的外观 16.2.6 在主题里使用CSS 16.2.7 通过配置文件来应用主题 16.2.8 动态应用主题 16.3 标准化网站布局 16.4 母版页基础 16.4.1 简单的母版页 16.4.2 简单的内容页 16.4.3 默认内容 16.4.4 具有格和CSS布局的母版页 16.4.5 母版页和相对路径 16.4.6 通过配置文件应用母版页 16.5 高级母版页 16.5.1 和母版页类交互 16.5.2 动态设置母版页 16.5.3 嵌套母版页 16.6 总结 第17章 网站导航 17.1 多视图页面 17.1.1 MultiView控件 17.1.2 Wizard控件 17.2 站点地图 17.2.1 定义站点地图 17.2.2 绑定站点地图 17.2.3 导航路径 17.2.4 显示站点地图的一部分 17.2.5 站点地图对象 17.2.6 加入自定义站点地图信息 17.2.7 创建自定义的SiteMapProvider 17.2.8 安全调整 17.3 URL映射和路由 17.3.1 URL映射 17.3.2 URL路由 17.4 TreeView控件 17.4.1 TreeNode 17.4.2 按需填充节点 17.4.3 TreeView样式 17.5 Menu控件 17.5.1 Menu样式 17.5.2 Menu模板 17.6 总结 第18章 网站部署 18.1 安装和配置IIS 18.1.1 安装IIS 7 18.1.2 管理IIS 7 18.2 部署网站 18.2.1 通过复制文件进行部署 18.2.2 使用Web部署 18.2.3 通过FTP部署 18.3 管理网站 18.3.1 创建新站点 18.3.2 创建虚拟目录 18.3.3 使用VirtualPathProvider 18.3.4 使用应用程序池 18.3.5 使用应用程序预热 18.4 扩展集成管道 18.4.1 创建处理程序 18.4.2 部署处理程序 18.4.3 配置处理程序 18.4.4 测试处理程序 18.5 总结 第四部分 安全 第19章 ASP.NET安全模型 19.1 为何创建安全软件 19.1.1 理解潜在的威胁 19.1.2 安全编程原则 19.1.3 理解Gatekeeper 19.2 理解安全级别 19.2.1 验证 19.2.2 授权 19.2.3 机密性和完整性 19.2.4 互相协作 19.3 理解SSL 19.3.1 理解证书 19.3.2 理解SSL 19.3.3 在IIS 7.x中配置SSL 19.4 总结 第20章 单验证 20.1 单验证介绍 20.1.1 为什么使用单验证 20.1.2 为什么不使用单验证 20.1.3 为什么不自己实现cookie验证 20.1.4 单验证类 20.2 实现单验证 20.2.1 配置单验证 20.2.2 禁止匿名用户访问 20.2.3 创建自定义登录页面 20.2.4 自定义凭证存储 20.2.5 单验证中的持久化cookie 20.3 IIS 7.x和单验证 20.4 总结 第21章 成员资格 21.1 介绍ASP.NET的成员资格API 21.2 使用成员资格API 21.2.1 配置单验证 21.2.2 创建数据存储 21.2.3 配置连接字符串和成员资格提供程序 21.2.4 创建并验证用户 21.3 使用安全控件 21.3.1 Login控件 21.3.2 LoginStatus控件 21.3.3 LoginView控件 21.3.4 PasswordRecovery控件 21.3.5 ChangePassword控件 21.3.6 CreateUserWizard控件 21.4 在IIS 7.x里配置成员资格 21.4.1 配置提供程序和用户 21.4.2 在其他应用程序里使用成员资格API 21.5 使用Membership类 21.5.1 从存储中获得用户 21.5.2 更新存储中的用户 21.5.3 创建和删除用户 21.5.4 检验用户 21.6 总结 第22章 Windows验证 22.1 介绍Windows验证 22.1.1 为什么使用Windows验证 22.1.2 为什么不使用Windows验证 22.1.3 Windows验证机制 22.2 实现Windows验证 22.2.1 配置IIS 7.x 22.2.2 配置ASP.NET 22.2.3 IIS 7.x管道 22.2.4 禁止匿名用户访问 22.2.5 访问Windows用户信息 22.3 身份模拟 22.3.1 Windows中的身份模拟和委托 22.3.2 经过配置的身份模拟 22.3.3 可编程的身份模拟 22.4 总结 第23章 授权和角色 23.1 URL 授权 23.2 文件授权 23.3 在代码中检查授权 23.3.1 使用IsInRole()方法 23.3.2 使用PrincipalPermission类 23.4 为基于角色的授权使用角色API 23.4.1 和角色一起使用LoginView控件 23.4.2 通过编程访问角色 23.4.3 在Windows验证中使用角色API 23.5 IIS 7.x里的授权和角色 23.5.1 在IIS 7.x里使用ASP.NET角色授权 23.5.2 在IIS 7.x中管理ASP.NET角色 23.6 总结 第24章 用户配置 24.1 理解用户配置 24.1.1 用户配置的性能 24.1.2 用户配置如何存储数据 24.1.3 用户配置和验证 24.1.4 用户配置与自定义的数据组件 24.2 使用SqlProfileProvider 24.2.1 创建用户配置 24.2.2 配置提供程序 24.2.3 定义用户配置属性 24.2.4 使用用户配置属性 24.2.5 用户配置序列化 24.2.6 用户配置组 24.2.7 用户配置和自定义的数据类型 24.2.8 用户配置API 24.2.9 匿名用户配置 24.3 自定义用户配置提供程序 24.3.1 自定义用户配置提供程序类 24.3.2 设计FactoredProfileProvider 24.3.3 通过编码实现FactoredProfileProvider 24.3.4 测试FactoredProfileProvider 24.4 总结 第25章 加密 25.1 加密数据:机密性问题 25.2 .NET加密命名空间 25.3 理解.NET加密类 25.3.1 对称加密算法 25.3.2 非对称加密 25.3.3 抽象加密类 25.3.4 ICryptoTransform接口 25.3.5 CryptoStream类 25.4 加密敏感数据 25.4.1 管理秘密信息 25.4.2 使用对称算法 25.4.3 使用非对称算法 25.4.4 加密数据中的敏感数据 25.5 加密查询字符串 25.5.1 包装查询字符串 25.5.2 创建一个测试页面 25.6 总结 第26章 自定义成员资格提供程序 26.1 自定义提供程序的架构 26.2 创建自定义提供程序的基本步骤 26.2.1 自定义提供程序的总体设计 26.2.2 设计并实现自定义存储 26.2.3 实现提供程序类 26.2.4 使用自定义提供程序类 26.3 总结 第五部分 高级用户界面 第27章 自定义服务器控件 27.1 自定义服务器控件入门 27.1.1 创建简单的自定义控件 27.1.2 使用自定义控件 27.1.3 工具箱中的自定义控件 27.1.4 创建支持样式属性的Web控件 27.1.5 呈现过程 27.2 处理不同的浏览器 27.2.1 HtmlTextWriter 27.2.2 浏览器检测 27.2.3 浏览器属性 27.2.4 覆盖浏览器类型侦测 27.2.5 自适应呈现 27.3 控件状态和事件 27.3.1 视图状态 27.3.2 控件状态 27.3.3 回传数据和change事件 27.3.4 触发回传 27.4 扩展现有的Web控件 27.4.1 组合控件 27.4.2 派生控件 27.5 总结 第28章 图形、GDI+和图 28.1 ImageMap控件 28.1.1 创建热点 28.1.2 处理热点单击 28.1.3 自定义热点 28.2 使用GDI+画图 28.2.1 简单绘制 28.2.2 图像格式和质量 28.2.3 Graphics类 28.2.4 使用GraphicsPath 28.2.5 画笔 28.2.6 画刷 28.3 在网页上嵌入动态图形 28.3.1 使用PNG格式 28.3.2 传递信息给动态图像 28.3.3 使用GDI+的自定义控件 28.4 使用Chart控件 28.4.1 创建基本的图 28.4.2 用数据填充图 28.5 总结 第29章 JavaScript和Ajax技术 29.1 JavaScript本质 29.1.1 HTML DOM 29.1.2 客户端事件 29.1.3 脚本块 29.1.4 操纵HTML元素 29.1.5 调试JavaScript 29.2 基本的JavaScript示例 29.2.1 创建JavaScript页面处理器 29.2.2 使用JavaScript异步下载图片 29.2.3 呈现脚本块 29.3 脚本注入攻击 29.3.1 请求验证 29.3.2 禁用请求验证 29.3.3 扩展请求验证 29.4 带有JavaScript的自定义控件 29.4.1 弹出窗口 29.4.2 滚动按钮 29.5 框架 29.5.1 框架导航 29.5.2 内联框架 29.6 理解Ajax 29.6.1 XMLHttpRequest对象 29.6.2 Ajax示例 29.7 在客户端回调中使用Ajax 29.7.1 创建客户端回调 29.7.2 深入了解客户端回调 29.7.3 自定义控件里的客户端回调 29.8 总结 第30章 ASP.NETAJAX 30.1 介绍ASP.NETAJAX 30.1.1 客户端的ASP.NETAJAX:脚本 30.1.2 服务器端的ASP.NETAJAX:ScriptManager 30.2 服务器回调 30.2.1 ASP.NETAJAX中的Web服务 30.2.2 在页面里放置Web方法 30.2.3 ASP.NETAJAX应用程序服务 30.3 ASP.NETAJAX服务器控件 30.3.1 使用UpdatePanel的局部呈现 30.3.2 使用Timer的定时刷新 30.3.3 使用UpdateProgress的耗时更新 30.3.4 管理浏览器历史 30.4 深入客户端 30.4.1 理解客户端模型 30.4.2 JavaScript的面向对象编程 30.4.3 网页框架 30.5 控件扩展器 30.5.1 安装ASP.NETAJAX控件工具包 30.5.2 AutoCompleteExtender 30.5.3 ASP.NETAJAX控件工具包 30.6 总结 第31章 使用Web部件页面的门户网站 31.1 典型门户页面 31.2 基本Web部件页面 31.2.1 创建页面设计 31.2.2 WebPartManager和WebPartZone 31.2.3 向页面添加Web部件 31.2.4 定制页面 31.3 创建Web部件 31.3.1 简单的Web部件任务 31.3.2 开发高级Web部件 31.3.3 Web部件编辑器 31.3.4 连接Web部件 31.3.5 自定义动词和Web部件 31.3.6 用户控件和高级Web部件 31.3.7 动态上传Web部件 31.3.8 对Web部件的授权 31.3.9 个性化的最后任务 31.4 总结 第32章 MVC 32.1 MVC和Web单的选择 32.2 创建基本的MVC应用程序 32.2.1 创建模型 32.2.2 创建控制器 32.2.3 创建Index视图 32.2.4 测试(未完成的)应用程序 32.2.5 完成控制器和视图 32.2.6 修改Site.Master文件 32.3 扩展基础的MVC应用程序 32.3.1 配置路由 32.3.2 增加错误处理 32.3.3 增加验证 32.3.4 增强数据存储访问 32.3.5 增加对外键约束的支持 32.4 自定义视图 32.4.1 修改视图 32.4.2 增加视图数据 32.5 强化模型 32.6 验证数据 32.6.1 执行基本的验证 32.6.2 增加验证标注 32.7 使用动作结果 32.7.1 返回JSON数据 32.7.2 调用其他控制器方法 32.8 总结 第33章 动态数据 33.1 创建动态数据应用程序 33.1.1 创建动态数据网站 33.1.2 检验动态数据网站 33.2 深入理解动态数据项目 33.3 自定义动态数据网站 33.3.1 使用模板进行自定义 33.3.2 使用路由进行自定义 33.3.3 使用元数据进行自定义 33.3.4 自定义验证 33.4 总结 第34章 Silverlight 34.1 理解Silverlight 34.1.1 Silverlight与Flash对比 34.1.2 Silverlight系统需求 34.2 创建Silverlight解决方案 34.2. 1 Silverlight编译 34.2.2 入口页面 34.3 创建Silverlight项目 34.3.1 设计Silverlight页面 34.3.2 理解XAML 34.3.3 设置属性 34.3.4 XAML 代码隐藏 34.3.5 处理事件 34.3.6 了解Silverlight类 34.4 布局 34.4.1 Canvas 34.4.2 网格 34.5 动画 34.5.1 动画基础知识 34.5.2 定义动画 34.5.3 StoryBoard类 34.5.4 交互式动画实例 34.5.5 变换 34.6 Silverlight使用Web服务 34.6.1 创建Web服务 34.6.2 添加Web引用 34.6.3 调用Web服务 34.6.4 配置Web服务URL 34.6.5 跨域Web服务调用 34.7 总结
对于用户自定义属性结构的设计,可以参考以下步骤: 1. 确定属性需要存储哪些信息,如属性名称、属性值、属性类型属性描述等。 2. 根据属性中需要存储的信息,设计结构。一般来说,属性的设计需要考虑到数据的灵活性和扩展性,因此可以采用类似键值对的方式进行设计。例如,可以设计一个包含属性名称、属性值和属性类型,其中属性名称作为主键,属性值和属性类型作为对应属性属性值和属性类型。 3. 根据第二步的设计,编写数据创建脚本。在创建的同时,可以定义一些约束条件,如属性名称不能重复,属性类型必须符合某种规定等。 4. 在应用程序中,根据需要对属性进行增删改查等操作。 关于DBC文件属性的学习,可以参考以下内容: DBC文件是CAN总线通信中使用的一种数据格式,用于描述网络中的节点、消息和信号等信息。在DBC文件中,可以定义节点的属性、消息的属性和信号的属性等。 节点的属性包括节点名称、节点类型、节点地址等。消息的属性包括消息ID、消息名称、发送节点、接收节点、周期等。信号的属性包括信号名称、信号起始位、信号长度、信号类型、信号因子等。 在使用DBC文件时,可以通过读取文件中定义的节点、消息和信号等信息,进行CAN总线通信的相关操作。同时,也可以根据需要对DBC文件进行修改和编辑,以满足具体的应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值