Whidbey’s New Wizard Control Adds Navigational Power

Whidbey’s New Wizard Control Adds Navigational Power

SP.NET v2.0 adds many new concepts and controls beyond those shipped in version 1.1. One of these is the Wizard control, which can simplify your life when you need to implement a “step by step” interface style to capture data. The Wizard provides built-in navigation capability that lets you make logical field groupings for each step in a single aspx page where the process would normally require multiple steps (and complicated logic or multiple pages). The Wizard control uses ViewState (.NET’s built-in method for maintaining control values between requests) to handle the data each time the Wizard posts data back to the server, thus reducing your work. Further, you can use customizable templates to tailor the display for each step of the wizard.

Capturing Customer Information
The sample Wizard application captures customer information details such as name, gender, address, and preferred notifications. Typically, the process would require a long input form or several pages. Figure 1 shows a database-table view of the fields the application should capture.

Add Template Definitions
The HeaderTemplate, StartNavigationTemplate, FinishNavigationTemplate, SideBarTemplate, and StepNavigationTemplate help you configure the Header, Start, Finish, Sidebar, and intermediate steps of the Wizard respectively. You add these templates within the section.

The HeaderTemplate is the simplest. To use it, add the HeaderTemplate definition shown in Listing 2.

Listing 2 contains nothing remarkable, just HTML declarations for a table with header text and an image. The header content will appear on each screen except the screen where steptype is Complete. Figure 6 shows how adding a header template changes the Start screen display. Remember to copy any image files to the image folder for your project, which you’ll find under the root folder.

Handling Validation and Events
To validate user inputs, you use the new ValidationGroup property. The property helps you validate control values within a particular grouping. Controls that inherit from BaseValidator expose ValidationGroup as a string property. To group controls, assign the same string value to ValidationGroup for all controls you want to place in that group. Then, assign the same string value to the ValidationGroup property of the Validation controls (such as RequiredFieldValidator, etc) that you’re using to validate the content, and to the control that posts the content?usually a button or link.

For example, the sample application declares RequiredFieldValidator validation controls, and associates them with the mandatory fields, and declares a CompareValidator to validate the birthdate entry. All the validation and field controls have the same ValidationGroup value?”customervalidate.” In addition, the Next and SideBar button controls ValidationGroup property have this value. Doing that ensures that all the controls associated with that ValidationGroup value get validated whenever the user clicks a sidebar link or the Next button.

You need to add some server side event handlers to handle the record insertion. The following code fragment associates the handlers with specific events.


I’ve used Trace statements in the sample code events to help you follow the event sequence. You can view the trace information by adding the trace=true directive to the page and then executing the application.

Table 3 describes the events used and a description stating when the event occurs and, where appropriate, how that event gets handled in the sample application.

Table 3. Wizard Events: The table contains a list and description of the Wizard events used in the sample application.




Fired for each step of wizard, since each step is a differentview. This occurs between the Begin Init and End init step, effectivelybefore the Init event executes.

Note: For the full server side code, refer tothe sample project that accompanies this article.


Fired when a user clicks the “NextButton” in any step.

Action: In the sample, theevent calls a “ProcessHeader” method. This method gets a collectionof all the WizardSteps as a WizardStepCollection using the WizardSteps (seeListing 1 for definitions) property of the wizard. Use the CurrentStepIndex propertyof the WizardNavigationEventArgs to get the currentstep from thiscollection. You can also use the wizard’s ActiveStep property for the same purpose.Finally, set the label control in the header to display contentlike “Step 1 of 2…” etc.

Note: Though direct reference to controlidentifiers is possible, as examples there are instances in thesample using FindControl to get reference to control.


Fired when a user clicks the “FinishButton” in the WizardStep (steptype=”Finish”).

Action: Iterate through each WizardStep of the WizardStepCollection andcollect the user input from the controls. In case the validationfails for mandatory check, use wzCustomer.MoveTo(step) to move backto a specific step. If validation succeeds update the database.


Fired on click of sidebar links. In the sample calls the method”ProcessHeader”.


Fired on click of Previous buttons. Not implemented in this sample.

Commonly Used Wizard Methods and Properties
You may need to identify and process each step as users complete a Wizard. The WizardNavigationEventArgs parameter sent by the control for each event provides properties you can use to identify the specific step involved, such as the NextStepIndex and CurrentStepIndex properties. Use the WizardStepCollection property to access individual steps and their contents. You can also cause the Wizard to move to a particular step using the MoveTo method. Table 4 describes the some of the most commonly used Wizard methods and properties you’ll need.

Table 4. Common Wizard Properties and Methods: The table shows the most common properties and methods of the Wizard control.




Used to get the currentstep of the Wizard.


WizardStepCollection?Gives you the collection of all Steps.You can pass the index to the collection to get a particular step.For example: WizardStepCollection StepsCollection= wzCustomer. WizardSteps;WizardStep step = StepsCollection[1];

FinishStepButtonText, NextStepButtonText, PreviousStepButtonText,etc

These are used to set the display text values of the correspondingbuttons. There are properties for each buttons available in wizard.


A very important method that moves the wizard to the step mentioned.

SideBarStyle, NavigationButtonStyle, etc

TableItemStyles to configure styles for respective controls.

At this point, you’ve completed the Customer information sample. Run the sample to investigate the flow and experiment with the Wizard. If you want to actually post the data to a database, run the .sql file that accompanies the sample code.

You can simplify the process of developing complex multi-page user input forms using the innovative Wizard control. The Wizard handles the multi-page scenario within a single page, and provides templates for customizing the form pages’ appearance. The Wizard navigation model supports skipping steps or jumping directly to a specific step, while the event model provides fine-grained control over the form data, which is critical in these scenarios.


Share the Post: