Есть ли способ сбросить все данные в мастере asp: на кнопке «Назад»? - PullRequest
0 голосов
/ 08 июля 2011

У меня есть тег <asp:Wizard> с несколькими страницами, каждая страница шага с кнопкой Назад, позволяющая вернуться на предыдущую страницу мастера.

Это вызывает у меня проблемы из-за этого потока:

  • 1 - пользователь находится на странице 3, например;
  • 2 - он заполняет некоторые данные, прежде чем осознает, что сделал неправильный выбор на странице 2;
  • 3 - он нажимает кнопку Назад.и переходит на страницу 2;
  • 4 - исправляет его выбор (данные на странице 3 больше не нужны)
  • 5 - он нажимает кнопку Далее и переходит на страницу 3. ЗДЕСЬЭто моя проблема. Данные были сохранены, и когда на странице 3 пользователь видит свои старые данные.Как мне это очистить?

Я новичок в ASP.NET WebForms.Пожалуйста, помогите, я застрял с этим и даже не знаю, как к нему подойти.Но я предполагаю, что мне не нужно сбрасывать все поля вручную !!!

1 Ответ

0 голосов
/ 08 июля 2011

Попробуйте

<asp:WizardStep ID="Step3" runat="server" Title="Step 3" EnableViewState="False">

ОБНОВЛЕНИЕ

Есть несколько простых способов сбросить все поля в вашей веб-форме.

  1. Кнопка сброса HTML:

    input type = "reset" value = "Reset Form!"/>

  2. Javascript:

    function resetforms() {document.forms[0].reset(); return false;}
    
  3. Вызов того же javascript из следующего кода:

     Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "document.forms[0].reset();return false;", true);
    

К сожалению, эти три не будут работать в случае с asp: Wizard, потому что все они сбрасывают элементы управления на значения, сохраняемые в ViewState после PostBack.

Так что наиболее подходящий вариант, который я нашел, - это использовать ручной кодрекурсивный метод, который будет вызываться из обработчика события Wizard 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);
    }

Приведенный выше метод сбрасывает все текстовые поля, выпадающие списки и флажки текущего WizardStep, если пользователь нажимает кнопку «Предыдущий» (перед пересылкой пользователяна предыдущий шаг).Поэтому, если вам нужно очистить любые другие элементы управления, вам нужно добавить соответствующий код в метод ClearInputs ().

Код адаптирован из этой записи.Там вы можете найти более подробную информацию о том, как работает метод, а также о способах решения той же задачи с использованием jQuery.

...