У меня есть шаг мастера ASP.NET, который включает пользовательский элемент управления на основе того, что было выбрано на предыдущем шаге:
<asp:WizardStep ID ="WizardStep3" runat="server" Title="Step 3">
<%switch (someFlag)
{
case ("value a"):
%>
<wizStep:Step3_ReportA ID="Step3_ReportA" runat="server" />
break;
case ("value b"):
%>
<wizStep:Step3_ReportB ID="Step3_ReportB" runat="server" />
<%
break;
} %>
</asp:WizardStep>
(Примечание: это просто псевдоразметка, поэтому не беспокойтесь о синтаксисе)
Этот подход, кажется, работает нормально и позволяет избежать проблем с добавлением элементов управления динамически на страницу и всех существующих постоянных проблем, связанных с обратной передачей.
Однако у меня также есть следующий код, который используется для проверки того, что было выбрано на шаге:
protected void wizReportWizard_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
int stepId = e.CurrentStepIndex;
var wizardStepControls = wizReportWizard.WizardSteps[stepId].Controls.OfType<BaseWizardStep>().ToList();
foreach (var wizardStepControl in wizardStepControls)
{
if (wizardStepControl.IsStepValid())
{
wizardStepControl.DoSomething();
}
else
{
e.Cancel = true;
return;
}
}
}
Что меня смущает, так это то, что wizardStepControls
содержит оба элемента управления шагом (Step3_ReportA
и Step3_ReportB
) - , а не только элемент управления, который был включен из-за switch
заявление . Конечно, при визуализации страницы выводится только один элемент управления.
Так почему все элементы управления в операторе switch сообщаются как принадлежащие к коллекции элементов управления шага мастера, и как мне найти, какой из них фактически выбрал оператор switch?
Заранее спасибо!