编程珠玑Dotnet1.docx
《编程珠玑Dotnet1.docx》由会员分享,可在线阅读,更多相关《编程珠玑Dotnet1.docx(35页珍藏版)》请在冰豆网上搜索。
编程珠玑Dotnet1
10
第章
窍门程序回顾
在变化越来越快的世界中,总是存在窍门程序。
现在,它们是开发人员的一种聪明、前沿的创造。
将来的某一天,它们有可能成为主流代码或最佳实践方式,并集成到产品或过程中。
窍门程序的成功标志是,有一天它变成了一种标准。
本章主要介绍已成功的窍门程序。
我们将回顾ASP.NETv1.1中已得到广泛认可的一组窍门程序。
它们非常有效,Microsoft已在ASP.NETv2.0中添加了对它们的支持。
本章并不是重新编写已发明的窍门程序,而主要探讨先驱和他们的工作,正是他们出色的工作使Microsoft在ASP.NETv2.0中添加了对窍门程序的支持。
对于已转而使用ASP.NET2.0的开发人员来说,要学习的是如何将这些窍门程序集成到.NETFramework中和相关的VisualStudio2005支持。
了解以前的窍门程序如何影响ASP.NET的当前版本,将使我们更加欣赏窍门程序,并激励我们开发出能正面影响ASP.NET未来版本的窍门程序。
1.1由ASP.NET2.0替代的向导窍门程序
向导是引导用户完成某个过程的用户界面工具。
这里讨论的是添加到应用程序中的向导。
开发人员已使用它们多年,例如安装程序,把复杂的操作简化为一系列步骤的工具等。
它们传统上是客户端桌面应用程序的一个标准部分,但在Web应用程序中以窍门程序的面目出现。
1.1.1ASP.NET向导先驱
在早期的ASP.NETv1.1中,JohnPeterson编写的向导窍门程序是作为一个范例在ASP(3.0的实现更新而来的。
在ASP.NET2.0向导宣布支持它后,TomBlanchard在SimulatingtheASP.NET2.0WizardControlwithASP.NET1.x”。
一些人还使用另一个已有的解决方案:
UserInterfaceProcess(UIP)ApplicationBlock上的WizardNavigator,它是由MicrosoftPatternsandPracticesGroup在dnpag2/html/cabctp.asp上创建的。
提示:
Microsoft的在线链接停了许多,但搜索MSDNArchitectureCenter的PatternsandPractices资源页面,仍能找到UIApplicationBlock。
1.1.2ASP.NETv2.0中的向导
向导在ASP.NET2.0中不再是一个窍门程序,它们很容易使用,在VisualStudio2005上得到了很好的支持。
下一节将介绍如何实现向导。
1.1.3实现ASP.NET2.0向导
ASP.NET2.0向导实现为控件。
要使用它们,只需把一个新的向导控件添加到可视化设计器中,设置其属性即可。
本节描述如何通过一个范例菜单选择应用程序来实现ASP.NET2.0向导。
在这个过程中要进行许多选择,向导将根据输入参数管理导航。
下面的步骤说明了如何创建范例应用程序:
(1)创建一个新的Web项目。
为此,选择File|New|WebSite,再选择ASP.NETWebSite模板,把目录位置改为WizardDemo,如图1-1所示。
图1-1
(2)单击OK按钮,VisualStudio2005就会创建一个新项目,如图1-2所示。
(3)如果当前在HTML视图上,如图1-2所示,就单击编辑器左下角的Design链接,进入设计视图。
图1-2
(4)在设计视图中,找到工具箱,它位于IDE的左边。
把鼠标指针停放在Toolbox标签上,就可以打开它。
单击工具箱的Standard区域,选择Wizard控件。
把一个Wizard控件拖放到窗体上,如图1-3所示。
图1-3
(5)选择View|PropertiesWindow,显示Properties窗口。
在这个窗口中,把HeaderText属性设置为MenuSelector。
(6)扩展Wizard控件,使其大小大约为400×200。
(7)Wizard控件在第一次添加到Web窗体上时,显示了两个链接,分别称为Step1和Step2。
选择Wizard控件中的Step1。
(8)在Wizard控件中选择编辑区域,输入“WhatisyourEatingPreference?
”。
(9)从工具箱中把一个RadioButtonList控件拖放到Wizard控件的编辑区域,在ActionList上选择EditItems。
在ListItemCollection编辑器上给两个新项的Text属性添加MeatEater和Vegetarian项。
图1-4显示了第5~9步的结果。
图1-4
(10)在Wizard控件中选择Step2。
(11)在编辑区域输入“PleaseSelectMainCourse:
”。
(12)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。
选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Chicken、Fish和Steak项。
图1-5显示了第10~12步的结果。
图1-5
(13)在WizardTasks列表中单击Add/RemoveWizardSteps,给Wizard控件添加Step3。
(14)选择刚才添加到Wizard控件中的新链接Step3。
(15)在编辑区域中输入“PleaseSelectMainCourse:
”。
(16)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。
选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Bread、Salad和VeggieTray项。
图1-6显示了第13~16步的结果。
图1-6
(17)在WizardTasks列表中单击Add/RemoveWizardSteps,给Wizard控件添加Step4。
(18)选择刚才添加到Wizard控件中的新链接Step4。
(19)在编辑区域中输入“PleaseSelectBeverage:
”。
(20)把一个RadioButtonList控件从工具箱拖放到Wizard控件的编辑区域。
选择ActionList中的EditItems,在ListItemCollection编辑器中为三个新项的Text属性添加Coffee、Water和Wine项。
图1-7显示了第17~20步的结果。
图1-7
这将为包含多个步骤的向导创建HTML。
程序清单1-1列出了这个页面的HTML,其中包含了本节后面进行的修改。
程序清单1-1中的HTML是我们在执行第1~20步时,由VisualStudio2005自动生成的。
在VisualStudio2005编辑器的底部选择HTML选项卡,从设计视图切换到HTML视图。
此时,将看到程序清单1-1中的代码。
程序清单1-1包含多个步骤的ASP.NETv2.0Wizard控件
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"
Inherits="_Default"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
//www.w3.org/1999/xhtml">
WizardDemo
WizardID="Wizard1"runat="server"
ActiveStepIndex="0"HeaderText="MenuSelector"
Height="200px"Width="400px"
OnFinishButtonClick="Wizard1_FinishButtonClick"
OnNextButtonClick="Wizard1_NextButtonClick">
WizardSteprunat="server"Title="Step1">
Whatisyoureatingpreference?
RadioButtonListID="RadioButtonList1"
runat="server">
ListItem>MeatEater
ListItem>
ListItem>Vegetarian
ListItem>
RadioButtonList>
WizardStep>
WizardSteprunat="server"Title="Step2">
Pleaseselectmaincourse:
RadioButtonListID="RadioButtonList2"
runat="server">
ListItem>Chicken
ListItem>
ListItem>Fish
ListItem>
ListItem>Steak
ListItem>
RadioButtonList>
WizardStep>
WizardSteprunat="server"Title="Step3">
Pleaseselectmaincourse:
RadioButtonListID="RadioButtonList3"
runat="server">
ListItem>Bread
ListItem>
ListItem>Salad
ListItem>
ListItem>VeggieTray
ListItem>
RadioButtonList>
WizardStep>
WizardSteprunat="server"Title="Step4">
Pleaseselectbeverage:
RadioButtonListID="RadioButtonList4"
runat="server">
ListItem>Coffee
ListItem>
ListItem>Water
ListItem>
ListItem>Wine
ListItem>
RadioButtonList>
WizardStep>
Wizard>