跨页投递是ASP.NET非常棒的一个特性,有一些文章深入讨论了跨页投递的技术细节,如果有兴趣跨页投递是如何运作的,可以查看Dino Esposito在MSDN杂志9月刊的 Cutting Edge column(请见本人译文:ASP.NET 表单 (翻译))。您很可能也会发现,如果您很精通ASP.NET,那么您大多数时候仍会继续使用标准的页面回发模型。(译者:言外之意,您如果是高手的话会不屑于此特性)
向导控件
通过跨页投递,可以很容易的给应用程序构建一个复杂的导航功能。然而,这个特性却不能简化您构建向导样式的用户界面。为了完成任务,无论线形或非线形,向导样式的用户界面都经常被设计。它提供给终端用户一个亲切的途径完成一系列复杂的步骤,每个步骤都被打碎为很多块。
在ASP.NET 1.x,向导常通过一些技巧来实现:将多个<ASP:panel>服务器控件放在同一个页面,通过用户所在的位置切换可见性。在ASP.NET中编写一个向导不是一件易事,很多设计师的丢弃了向导,并且步骤流程的管理也很混乱。
ASP.NET中新的跨页投递能力可以用来解决向导问题,但是当需要非线性导航存在时就同样是挑战了。例如,步骤1,步骤2,跳过步骤3-5,步骤6,步骤3,步骤2,步骤6,ASP.NET 2.0 向导控件解决了大部分这类问题。还有,通过页面回发模型替换跨页投递向导的所有的输入元素可以持续访问。
向导控件功能上很大程度的接近ASP.NET 1.1中隐藏panel的方式。然而,向导控件显露了一系列的<ASP:WizardStep>,它们可以包含任意数量的子控件,然而每个<ASP:WizardStep>需要有自己的unique ID,见图1。向导控件页管理所有的导航,支持线性和非线性导航,并且有vs完整的设计时支持。图2演示了向导控件,左边是基于link的非线性导航,右下是线性的按钮导航。从打开的任务菜单,可以看到不仅仅是一个公共任务而是一个步骤列表允许在设计时切换步骤。 
图2 向导在Visual Studio中的情形
向导控件的所有可见元素都是可以配置的。非线性链接可以用按钮或删除入口代替,上一步,下一步,完成线性导航元素也可以改变为图片按钮或链接。事实上,控件所有的面貌都可以通过模板配置。
在ASP.NET 1.1中编写向导控件的一个难点就是管理用户应该身在何处。向导控件通过显露ActiveStep属性简化了此工作。ActiveStep属性可以查询并确定当前哪个步骤是被激活的。向导的自然流程会按照实现声明好的方式进行,流程可以通过MoveTo方法随时改变。通过MoveTo,任意步骤可以被设定为ActiveStep,为了辅助导航和流程,还提供了几个事件,见图3。
新的向导控件在搜集用户信息时非常有用,不想ASP.NET 1.1中所有的基础构造都要编写,ASP.NET把所有的工作都给您准备好了。向导控件太有用了,ast.net小组使用它作为CreateUserWizard控件的基类,CreateUserWizard控件用作Membership功能的一部分创建用户。
小节
跨页投递和<ASP:Wizard>控件给ASP.NET开发者在应用程序中控制导航流程带来几个新的选择。跨页投递对于目前需要使用Response.Redirect 或 Server.Transfer 情况非常有用。向导控件用来构建同时需要线形和非线形的复杂的数据搜集的确很棒。
------------------------------------------------
图 1 向导步骤
<ASP:Wizard runat="server" >
<WizardSteps>
<ASP:WizardStep ID="Step1">
Welcome!
</ASP:WizardStep>
<ASP:WizardStep ID="Step2">
What is your name: [TextBox1]
[Button1]
</ASP:WizardStep>
<ASP:WizardStep ID="Step3">
Thank you, [TextBox1.Text]!
</ASP:WizardStep>
</WizardSteps>
</ASP:Wizard>
-----------------------------------------------------
图 3 Navigation Events
| Event | Description |
|---|---|
| ActiveStepChanged | Raised when the ActiveStep is set to a new WizardStep |
| CancelButtonClick | Raised when the button identified as the Cancel button is clicked |
| FinishButtonClick | Raised when the button identified as the Finish button is clicked |
| NextButtonClick | Raised when the button identified as the Next button is clicked |
| PreviousButtonClick | Raised when the button identified as Previous button is clicked |
| SideBarButtonClick | Raised when one of the SideBar links or buttons is clicked |
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



