我有一个asp:wizard
控件包含五个WizardSteps。所有这些步骤都有表单控件,并且大多数这些控件都有验证器。当用户使用下一个和上一个按钮逐步完成向导时,所有工作都很好,并且验证触发器应该如此。但是,如果用户选择使用SideBar中的链接导航向导,他或她可以跳过一些步骤。提交最后一页(这是一个摘要页面)时,向导中可能有控件无效。验证FinishButtonClick上的所有向导步骤
我想要做的是在用户单击完成按钮或用户进入摘要页面时检查所有控件的状态(或运行所有验证器)。我已经做出了尝试做这个运行在FinishButtonClick事件的所有验证:
bool validates = true;
foreach (IValidator validator in this.Validators) {
validator.Validate();
if (!validator.IsValid) {
validates = false;
}
}
e.Cancel = !validates;
但是当我这样做的每个验证声称它们是有效的。我也尝试将所有控件设置为Visible = true;在此代码块之前,但这没有效果。任何想法可能是错的?或者是这样做的更好的方式,也许是我失踪的向导控件的本地函数?
我担心这是这样的。问题是向导窗体的一个要求是应该可以独立于prev/next按钮进行导航。感谢Page.Validate/IsValid的提示。我先试了一下,但是因为它没有返回我期望的结果,所以我尝试迭代所有验证器。也许我应该跟踪已渲染(和验证)的哪些WizardSteps,然后拒绝进入摘要页面...... – Erik 2010-11-08 13:56:30
您可以按照您的建议进行操作。当页面完成后,将其添加到您的ViewState中。然后,当你点击'完成'按钮时,你可以检查哪些页面已经完成和验证,并向用户显示一条消息,要求完成页面n,n和n。 – Jamie 2010-11-08 14:11:36
谢谢,我带着这个变化去了。我跟踪具有最高索引的WizardStep的索引,该索引也被验证(存储在ViewState中)。当用户在向导中向前导航时,如果((e.NextStepIndex - 1)> this.CurrentWizardStep)访问被拒绝并显示错误消息。 – Erik 2010-11-08 16:13:33