Удаленные шаги в мастере ASP.NET вновь появляются после обратной передачи - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть мастер ASP.NET с несколькими шагами, где мне нужно пропустить некоторые шаги на основе определенных флагов.Я думал, что мог бы использовать метод Wizard.WizardSteps.Remove (WizardStepBase), чтобы избавиться от ненужных шагов, поскольку их нельзя отключить.

У меня есть пять шагов, указанных в разметке, когда я впервыеперейдите на страницу, содержащую мастера.

<asp:Wizard ID="Wizard1" runat="server" OnActiveStepChanged="Wizard1_ActiveStepChanged" OnFinishButtonClick="Wizard1_FinishButtonClick" OnNextButtonClick="Wizard1_NextButtonClick">
    <!-- Navigation and Header templates go here -->
    <WizardSteps>
        <asp:WizardStep ID="StepA" runat="server">
            <!-- Content goes here -->
        </asp:WizardStep>
        <asp:WizardStep ID="StepB" runat="server">
            <!-- Content goes here -->
        </asp:WizardStep>
        <asp:WizardStep ID="StepC" runat="server">
            <!-- Content goes here -->
        </asp:WizardStep>
        <asp:WizardStep ID="StepD" runat="server">
            <!-- Content goes here -->
        </asp:WizardStep>
        <asp:WizardStep ID="StepE" runat="server">
            <!-- Content goes here -->
        </asp:WizardStep>
    </WizardSteps>
</asp:Wizard>
  • Шаг A: индекс = 0
  • Шаг B: индекс = 1
  • Шаг C: индекс = 2
  • Шаг D: индекс = 3
  • Шаг E: индекс = 4

Я удаляю шаги C и D, используя метод Wizard.WizardSteps.Remove (WizardStepBase),Если я проверю индексы снова, у меня будет следующее:

  • Шаг A: индекс = 0
  • Шаг B: индекс = 1
  • Шаг C: индекс = -1 (не найдено; оно было удалено)
  • Шаг D: индекс = -1 (не найдено; оно было удалено)
  • Шаг E: индекс = 2

Это то, что я хочу.Если щелкнуть следующую кнопку, произойдет обратная передача, и я смогу перейти от шага A к шагу B, шагу B к шагу E в обработчике событий NextButtonClick, а шаг C и шаг D не отображаются.

Проблема в том, что после обратной передачи снова появляются шаги, поэтому кажется, что даже когда ViewState включен, мне придется удалять шаги C и D при каждой обратной передаче.Я ожидаю, что Мастер запомнит, какие шаги были в его коллекции.Есть ли конкретная причина, почему это не так?

Вот исходный код:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Omitted: Setting values of StepAEnabled, etc. based on business rules.
        // Just hard-code for this example
        var stepAEnabled = true;
        var stepBEnabled = true;
        var stepCEnabled = false;
        var stepDEnabled = false;
        var stepEEnabled = true;

        if (!stepAEnabled)
            Wizard1.WizardSteps.Remove(StepA);

        if (!stepBEnabled)
            Wizard1.WizardSteps.Remove(StepB);

        if (!stepCEnabled)
            Wizard1.WizardSteps.Remove(StepC);

        if (!stepDEnabled)
            Wizard1.WizardSteps.Remove(StepD);

        if (!stepEEnabled)
            Wizard1.WizardSteps.Remove(StepE);
    }

    // When !IsPostBack, totalSteps == 3
    // When IsPostback, totalSteps == 5
    var totalSteps = Wizard1.WizardSteps.Count;
}
...