五、构建“添加新队员”向导
你可以看到,上面列表中并没有包括任何服务器端代码。你可以把该代码保存到一个ASPX文件中。当启动浏览器运行向导页面时,你会看到如图3所示屏幕快照。
图3.添加新队员数据向导
该向导由三步组成。首先你要收集新队员的姓名,私人信息及可选的备注信息。然后,你通过创建一个摘要页面结束此向导。然后,该向导完成该操作,保存任何数据,并且通过一个结束步骤显示最后的消息。如图3所示,你可以很容易地(以声明方式)实现校验功能以确保只有输入了正确数据时用户才能转到下一步。为此,你应该在向导视图中使用ASP.NET校验器控件以便快速进行客户端检查。如果你需要存取任何服务器端资源来校验输入信息的话,你应该使用Transition事件。
ASP.NET 2.0提供可定制的主题(Theme)以使你的向导更具吸引力。一个主题是一组图形化设置(式样表和控件属性),它们能够应用于页面或应用程序中所有的服务器控件上。它们提供一种很巧妙的方法把一种标准的一致性的外观应用到Web页面和控件。主题是以文本文件发布的,并且可以应用于整个应用程序中的所有页面。
你可以在向导的左上角添加一幅图像,这样可以增强视觉吸引力并且也可以传送一些额外信息,特别当你使用一个向导侧栏时(见图3)。
你可以使用多种方法来改变这些控件的外观。为所有的按钮确定一个一致的外观的最容易的方法是定义一个NavigationButtonStyle对象。这个方法可以确保所有的按钮共用一组式样,而且还允许你通过特定的风格(例如CancelButtonStyle)逐个定制按钮。
你可以使用属性控制每一个按钮上的文本—还能够使用图像和可选的文本。下面的例子说明了这一点:
|
【注意】如果两个属性都设置,则文本优先。在上面示例中使用的NextStepButtonXxx属性仅在普通步骤中起作用。显示于开始页面中的“下一步”按钮可以使用一组不同的属性进行定制。
六、向导事件
Wizard控件能够为你代劳一个多步骤输入过程中的许多细节操作,特别是在Web场所下。然而,对于一些核心任务仍然要求手工编码。为此,需要一个事件模型来负责通知何时向导完成一项给定任务—例如移动到下一个或前一个页面,已完成或刚启动某过程等。
除了任何服务器控件具有的典型事件(例如Init,Load和PreRender)外,Wizard控件还提供了一些特定事件(详见MSDN)。其中,绝大多数事件与导航按钮和侧栏元素的点击事件相关。例如,当前活动视图因用户行为改变时,将引发ActiveStepChanged事件。当用户点击导航按钮时,页面发生回寄,并且在缺省页面重新初始化后,第一个被激发的服务器事件将对应于选定按钮的Click事件。然后,如果前一个调用的事件处理器导致一个视图切换,那么将触发ActiveStepChanged事件。
ActiveStepChanged事件所使用的代理是很简单的—EventHandler—它并不传送任何其它信息,而只是作为一个用于报告某事发生的普通通知。CancelButtonClick事件表示撤销向导,此事件也没有太多的实现细节。
【注意】如果用户依次通过各个向导步骤,而不是在最后一步才提交所有内容时,需要由你来编写“恢复”(即“undo”)代码—当用户选择取消动作而此时可能已经发生某些变化。
所有另外的事件都请求一个更丰富的代理—WizardNavigationEventHandler—它使用WizardNavigationEventArgs类来传送一些其它信息:
|
值得注意的是,所有Click事件都发生在视图切换之前;该Click事件是你执行任何必要的校验并且对这一步作出任何决定性结论的最后机会。这里,integer型属性CurrentStepIndex指示当用户点击页面时的步骤索引值,而NextStepIndex属性指示当前事件处理结束后的新的步骤索引。这种模型非常类似于ASP.NET 1.x在DataGrid的分页技术中所使用的方式。在这种上下文中,PageIndexChanged事件拥有CurrentPageIndex值和NewPageIndex属性,供你参考使用。当然,这还可以使你以编程方式改变执行步骤。
通过把Cancel属性设置为true,任何步骤中所作的改变都可以被抛弃。例如,你定义一个“next”按钮点击相应的处理器,那么当用户点击并看到下一个页面时,你检查输入的姓名是否是你自己提供的已有名单—此时,向导会拒绝切换到下一步骤。下面是一个示例:
|
为了Get/Set视图控件中的值,我们通常使用基于ASP.NET ID的语法。从技术上讲,这是可以支持的,因为所有的向导视图都是相同的页面,尽管每次仅有一个视图是活动的和可见的。
你可以设置任何要求的事件处理器—这可以通过使用声明方式的基于属性的ASP.NET语法,或使用.NET语言支持的代理(delegate)语法来实现。例如,下列片断展示了如何通过一个属性定义一个事件处理器:
| 共4页: 上一页 [1] [2] 3 [4] 下一页 | ||
|
|
|||
| · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. · 51CTO技术自测 挑战自.. · CISSP认证成长之路 · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 |
· 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 · RIP路由协议专栏 · MPLS路由协议专栏 · OSPF路由协议专栏 · 思科路由器产品 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · Solaris 10 配置管理 · C#技术开发指南 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·拯救系统管理员 ·美国选民:我为什么选布什 |
·VMware公司中文命名挑战赛 ·我们真缺乏创新吗? |
| ·J0ker的CISSP之路:复习-.. ·J0ker的CISSP之路:复习-I.. |
·9月第3周安全回顾 内网安.. ·教你几招识别和防御Web网.. |
| · NGN:下一代网络 · 网络访问中断大排查 · FTTx光纤接入 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· 费力不讨好 数据中心主.. · AMD Phenom三核处理器解.. · 51CTO主编推荐经典专题 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. · 双机热备技术 |