【发布时间】:2011-06-15 07:24:37
【问题描述】:
我正在评估 ASP.NET 向导控件。我们需要从不同步骤收集数据,验证数据,最后我应该能够显示数据摘要。
我想从小组中了解是否有人使用过此控件以及他们遇到了什么问题。此控件是否有任何使用限制?
【问题讨论】:
我正在评估 ASP.NET 向导控件。我们需要从不同步骤收集数据,验证数据,最后我应该能够显示数据摘要。
我想从小组中了解是否有人使用过此控件以及他们遇到了什么问题。此控件是否有任何使用限制?
【问题讨论】:
我个人不喜欢向导控件。它非常僵硬,我发现它不是很好用。从那时起,我在向导的每个步骤中都使用了内部的 MultiView 控件和带有用户控件的 UpdatePanel。这样它就可以完全灵活了。
使用 MultiView 方法,您还可以在设计器中轻松查看向导的所有步骤。
不过,这只是我在控件上的选择,第一次访问时我没有给它太多机会。
【讨论】:
如果您使用得当,Wizard 控件可以为您节省大量的管道时间 - 但是,学会如何使用它可能比您节省的管道时间花费更多。如果您打算重复使用它,那么最初投资于了解其特性可能是值得的。
我已经构建了一个向导,其中侧栏中显示的步骤取决于您所处的步骤(以及您在该点所做的工作)。因此,当您按下 Next 或 Previous 时,您所执行的步骤也是动态确定的。
为了实现这一点,我阅读了很多关于动态禁用步骤、隐藏步骤以及添加和删除步骤的内容。后者将我带入了 ViewState 的深水区。对于它的价值,这是我的基本方法:
您可以通过将步骤 ID(和标题,如果已设置)设置为空字符串来控制边栏中可见的步骤,例如我在 arrWizardSteps() 中有步骤名称,并且我的步骤定义为整数常量,然后使用
For i = intCREDENTIALS To intADDITIONAL_INFORMATION
Wizard1.WizardSteps(i).ID = IIf(Wizard1.ActiveStepIndex < i, "", arrWizardSteps(i))
Next
如果步骤相对独立,您可以通过调用相同的例程来处理 SideBarButtonClick、PreviousButtonClick 和 NextButtonClick 事件,您构造该例程来处理离开当前步骤并进入下一个步骤,而不管您单击哪个按钮进行过渡。例如,例程可能会存储当前步骤的控件捕获的数据,并将一些数据加载到下一步的控件中。
如果您确实处理了这些事件,您可能需要自己处理更改 ActiveStepIndex。如果您不更改它,向导将增加/减少 ActiveStepIndex(取决于按下哪个按钮)(除非您在处理程序中设置 e.Cancel=true,其中 e 是处理程序的 WizardNavigationEventArgs 参数)。
如果您的隐藏步骤代码需要知道目标步骤,那么您需要将该代码放入 PreRender,因为此时向导将移至下一步,您将知道它是什么。
【讨论】: