C# 是否有一种方法可以重置asp:向导中“返回”按钮上的所有数据?

C# 是否有一种方法可以重置asp:向导中“返回”按钮上的所有数据?,c#,asp.net,navigation,reset,web-controls,C#,Asp.net,Navigation,Reset,Web Controls,我有一个带有几个页面的标签,每个步骤页面都有一个返回按钮,可以返回到上一个向导页面 由于此流程,这会导致我出现问题: 1-例如,用户位于第3页; 2-他在意识到自己在第2页的选择错误之前填写了一些数据; 3-他单击后退并转到第2页; 4-修复第3页中的数据现在没有任何用处 5-他单击“下一步”进入第3页。这是我的问题。数据被持久化,当用户在第3页看到他的旧数据时。我该如何澄清这一点? 我不熟悉ASP.NET WebForms。请帮帮我,我被这件事缠住了,甚至不知道如何处理。但我想我不需要手动重置

我有一个带有几个页面的标签,每个步骤页面都有一个返回按钮,可以返回到上一个向导页面

由于此流程,这会导致我出现问题:

1-例如,用户位于第3页; 2-他在意识到自己在第2页的选择错误之前填写了一些数据; 3-他单击后退并转到第2页; 4-修复第3页中的数据现在没有任何用处 5-他单击“下一步”进入第3页。这是我的问题。数据被持久化,当用户在第3页看到他的旧数据时。我该如何澄清这一点? 我不熟悉ASP.NET WebForms。请帮帮我,我被这件事缠住了,甚至不知道如何处理。但我想我不需要手动重置所有字段

试试看

<asp:WizardStep ID="Step3" runat="server" Title="Step 3" EnableViewState="False">
从codebehind调用相同的javascript:

 Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "document.forms[0].reset();return false;", true);
不幸的是,这三个选项在asp:Wizard的情况下不起作用,因为它们都将控件重置为回发后在ViewState中保留的值

因此,我发现最合适的选择是使用手动编码的递归方法,该方法将从向导的PreviousButtonClick事件处理程序中调用:

    private void ClearInputs(ControlCollection ctrls)
    {
        foreach (Control ctrl in ctrls)
        {
            if (ctrl is TextBox)
                ((TextBox)ctrl).Text = string.Empty;
            else if (ctrl is DropDownList)
                ((DropDownList)ctrl).ClearSelection();
            else if (ctrl is CheckBox)
                ((CheckBox)ctrl).Checked = false;

            ClearInputs(ctrl.Controls);
        }
    }

    protected void YourWizardName_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
    {
        ClearInputs(YourWizardName.WizardSteps[e.CurrentStepIndex].Controls);
    }
如果用户在将用户转发到上一步骤之前单击“上一步”按钮,上述方法将重置当前向导步骤的所有文本框、下拉列表和复选框。因此,如果需要清除任何其他控件,则必须向ClearInputs方法中添加适当的代码


代码是根据《邮报》改编的。在那里,您可以找到有关该方法如何工作以及使用jQuery解决相同任务的方法的更多详细信息。

据我所知,ViewState包含来自表单控件的数据。如果我这样做,我导航到第4页,第5页。。。完成页面后,我会将所有数据都放在最后还是会丢失步骤3中的数据?你是对的,如果步骤3不是最后一步,这是一个糟糕的解决方案。
    private void ClearInputs(ControlCollection ctrls)
    {
        foreach (Control ctrl in ctrls)
        {
            if (ctrl is TextBox)
                ((TextBox)ctrl).Text = string.Empty;
            else if (ctrl is DropDownList)
                ((DropDownList)ctrl).ClearSelection();
            else if (ctrl is CheckBox)
                ((CheckBox)ctrl).Checked = false;

            ClearInputs(ctrl.Controls);
        }
    }

    protected void YourWizardName_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
    {
        ClearInputs(YourWizardName.WizardSteps[e.CurrentStepIndex].Controls);
    }