by the way, if anyone's interested, here's the test rig I used to figure this out, it's a modified version of the code I posted above:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected override void OnLoad(EventArgs e)
{
TheWizard.ActiveStepChanged += new EventHandler(TheWizard_ActiveStepChanged);
TheWizard.NextButtonClick += new WizardNavigationEventHandler(TheWizard_NextButtonClick);
TheWizard.PreviousButtonClick += new WizardNavigationEventHandler(TheWizard_PreviousButtonClick);
TheWizard.Init += new EventHandler(TheWizard_Init);
TheWizard.Load += new EventHandler(TheWizard_Load);
TheWizard.PreRender += new EventHandler(TheWizard_PreRender);
TheWizard.Unload += new EventHandler(TheWizard_Unload);
// only check on first time in
if (!IsPostBack)
// look in querystring for jump command
if (Request.QueryString["jumptostep"] != null)
{
// do the jump
//TheWizard.ActiveStepIndex = Convert.ToInt32(Request.QueryString["jumptostep"]);
TheWizard.MoveTo(TheWizard.WizardSteps[
Convert.ToInt32(Request.QueryString["jumptostep"])
]);
}
}
void TheWizard_Unload(object sender, EventArgs e)
{
ReportState(sender, "Unload");
}
void TheWizard_PreRender(object sender, EventArgs e)
{
ReportState(sender, "PreRender");
}
void TheWizard_Load(object sender, EventArgs e)
{
ReportState(sender, "Load");
}
void TheWizard_Init(object sender, EventArgs e)
{
ReportState(sender, "Init");
}
void TheWizard_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
{
ReportState(sender, "PreviousButtonClick", e.CurrentStepIndex, e.NextStepIndex);
((Wizard)sender).ActiveStepIndex = ((Wizard)sender).ActiveStepIndex - 1;
ReportState(sender, "PreviousButtonClick - Fix?", e.CurrentStepIndex, e.NextStepIndex);
}
void TheWizard_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
ReportState(sender, "NextButtonClick", e.CurrentStepIndex, e.NextStepIndex);
((Wizard)sender).ActiveStepIndex = ((Wizard)sender).ActiveStepIndex + 1;
ReportState(sender, "NextButtonClick - Fix?", e.CurrentStepIndex, e.NextStepIndex);
}
void TheWizard_ActiveStepChanged(object sender, EventArgs e)
{
ReportState(sender, "ActiveStepChanged");
}
void ReportState(object sender, string eventName)
{
ReportState(sender, eventName, null, null);
}
void ReportState(object sender, string eventName, int? currentStepIdx, int? nextStepIdx)
{
Wizard wiz = (Wizard)sender;
WriteTrace("<b>" + eventName + "</b>" +
"ActiveStepIndex = " + wiz.ActiveStepIndex.ToString() +
((currentStepIdx.HasValue) ? "CurrentStepIndex = " + currentStepIdx.ToString() : "") +
((nextStepIdx.HasValue) ? "NextStepIndex = " + nextStepIdx.ToString() : "")
);
}
void WriteTrace(string msg)
{ this.TraceBox.Text += msg + "<br/>"; }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title /></head>
<body>
<form id="form1" runat="server">
imagine these links are on another page:<br />
jump in at: [<a href="?jumptostep=2">step 2</a>][<a href="?jumptostep=3">step 3</a>]
<hr />
<asp:Wizard ID="TheWizard" runat="server">
<WizardSteps>
<asp:WizardStep ID="Step0" runat="server">Step 0</asp:WizardStep>
<asp:WizardStep ID="Step1" runat="server">Step 1</asp:WizardStep>
<asp:WizardStep ID="Step2" runat="server">Step 2</asp:WizardStep>
<asp:WizardStep ID="Step3" runat="server">Step 3</asp:WizardStep>
<asp:WizardStep ID="Step4" runat="server">Step 4</asp:WizardStep>
<asp:WizardStep ID="Step5" runat="server">Step 5</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
<asp:Literal ID="TraceBox" runat="server" EnableViewState="false"></asp:Literal>
</form>
</body>
</html>