CreateUserWizard忽略.MoveTo

时间:2013-09-26 14:46:07

标签: asp.net .net-4.5 createuserwizard

这让我疯了。我已经审查并尝试了这些SO线程的答案,但无济于事:

CreateUserWizard step changing issue after account creation

Advancing wizard from code-behind in ASP.NET

Prevent Navigation to CreateUserWizardStep in the Postback event of nextbutton

我在创建数据库用户的那个之前添加了一个wizardstep:

(0)个人资料

(1)注册新帐户

(2)完成

在第0步中,我有一个(可怕的)reCaptcha。步骤0的导航模板:

    <StartNavigationTemplate>
        <asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="Next"  OnClick="StartNextButton_Click" CausesValidation="true"/>
    </StartNavigationTemplate>

在这里,我验证了代码隐藏中的reCaptcha。此处理程序声明由VS2012创建。如果验证失败,应重新加载(并导航到)步骤:

    protected void StartNextButton_Click(object sender, EventArgs e)
    {
        recaptcha.Validate();
        if (! recaptcha.IsValid)
        {
            RegisterUser.ActiveStepIndex = 0;
            RegisterUser.MoveTo(RegisterUser.ActiveStep);              
        }
    }

理想情况(以及我在早期版本中所做的)是在验证失败时设置e.Cancel = true。由于VS只传递EventArgs e,因此无法取消取消,因此无法使用ActiveStep。

调试显示验证正在运行,但在验证失败时 - 尽管将ActiveStepIndex设置为0 - 我已转到步骤1.

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:2)

向导不会停止进入下一步。您需要定义OnNextButtonClick并使用此事件取消移至下一个向导步骤。

<asp:Wizard OnNextButtonClick="RegisterUser_NextButtonClick" ID="RegisterUser" 
     runat="server">

protected void RegisterUser_NextButtonClick(object sender, WizardNavigationEventArgs e)
 {
           if(RegisterUser.ActiveStep==0)
               {
                 recaptcha.Validate();
                    if (! recaptcha.IsValid)
                        {
                            e.Cancel = true;
                        }            
                }
      return;
}