asp.net - 回发后重新出现 ASP.NET 向导中删除的步骤
问题描述
我有一个 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
我使用 Wizard.WizardSteps.Remove(WizardStepBase) 方法删除步骤 C 和 D。如果我再次检查索引,我有以下内容:
- 步骤 A:索引 = 0
- 步骤 B:索引 = 1
- 步骤 C:index = -1(未找到;已删除)
- 步骤 D:索引 = -1(未找到;已删除)
- 步骤 E:索引 = 2
这就是我要的。如果单击下一步按钮,则会发生回发,并且我应该能够在 NextButtonClick 事件处理程序中从步骤 A 导航到步骤 B,从步骤 B 导航到步骤 E,并且不显示步骤 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;
}
解决方案
我有同样的问题,尝试删除你想要的Page_LoadComplete
循环步骤如下:
protected void Page_LoadComplete(object sender, EventArgs e)
{
foreach (WizardStepBase step in wizard.WizardSteps)
{
if (YOUR LOGIC)
{
wizard1.WizardSteps.Remove(step);
}
}
}
推荐阅读
- azure - 可以通过 Web 应用程序防火墙状态/计费以编程方式暂停/恢复 Azure 的应用程序网关吗?
- python - python numpy linalg求解器:错误答案
- postgresql - Grafana Postgres 查询编辑器和 pg_prometheus (timescaledb)
- c# - 找不到类型或命名空间。但是有参考资料
- vue.js - 如何将 nextPage 变量值从孩子传递到父母的路由器链接?
- python - 仅使用 python regex 获取文本
- javascript - js针对内部ul的第一个li
- prolog - Prolog DCG Sytnax 错误:应为操作员
- python - 在 python opencv 中显示来自 Bag of Visual Words 的 Visual word 示例/样本
- keras - 使用 ** layers[0].get_weights()[0]** 的嵌入