【问题标题】:Is there an elegant / simple way to handle the logical flow for a wizard UI是否有一种优雅/简单的方法来处理向导 UI 的逻辑流程
【发布时间】:2011-08-25 23:21:48
【问题描述】:

我有一个由几十个 UI 元素(所有服务器控件)组成的 WebForm。我通过使用 asp:Placeholder 控件将 UI 元素分成不同的步骤并在回发之间设置它们的可见性,从而将整个页面变成了类似向导的用户体验。一次只能看到一个占位符。

如果 UI 体验仅包含从第 1 步到第 10 步的移动,那么创建一个通用的 Next / Prev 按钮处理程序来完成这些步骤是非常简单的。但是,有一些 UI 元素可以确定显示哪些步骤(向导窗格)。 (两个单选按钮,不同页面上的两个复选框)

是否有一种优雅或简单的方法来实现此流程逻辑,而无需为页面上的每个 Next/Prev 按钮创建专用的 Click 处理程序?如果有这样的模式,它会躲避我。

【问题讨论】:

  • 你知道 ASP.NET 2.0 向导控件吗?
  • 哦,是的。是的,我愿意。 :|我没有使用它,因为我不喜欢它在代码隐藏中隐藏控件的方式。当你有几十个控件时,每次你想访问一个控件时调用 container.FindControl() 真的很不方便。然而,Wizard控件真的解决了这个问题吗?
  • 嗯...看起来向导控件确实有同样的问题:msdn.microsoft.com/en-us/library/w7dyf6b5.aspx
  • 我重新阅读了您的帖子并考虑了一分钟。如果我正在做你的工作,我可能会创建一个充当整个向导的“视图模型”的类。你知道我的意思吗?我很难表达这一点..
  • 经过更多研究并阅读此处的答案后,我认为我原来的问题的答案是“否”。

标签: c# asp.net webforms


【解决方案1】:

看看这个:jQuery Form Wizard

我最近将一个表单转换为一个向导,它工作得非常好。它可能对你有用。

【讨论】:

    【解决方案2】:

    创建母版页 将导航按钮添加到母版页。

    创建一个继承自 Web.UI.Page 的抽象基类。

     public abstract class WizardPage: Page
        {
            public abstract void NextStep();
            public abstract void PreviousStep();
        }
    

    为 NextStep 和 PreviousStep 添加抽象方法。

    将每个向导步骤创建为从基类继承的单独页面。

    使用适当的导航在每个页面上实现 NextStep 和 PreviousStep 步骤。

    连接母版页上的按钮以调用活动页面的方法...

     protected void NextButton_Click(object sender, EventArgs e)
            {
                if (Page is WizardPage)
                {
                    WizardPage wizPage = (WizardPage)Page;
                    wizPage.NextStep();
                }
            }
    

    说了这么多 -- 我会检查向导控件。

    【讨论】:

    • +1;这不是很“优雅”,因为它不是高度声明性的(只需指定页面顺序,并让一些小的引导代码或框架处理其余部分)。但是这个解决方案的好处是你可以让你的处理程序逻辑尽可能复杂,这样你就可以拥有不是完全线性的向导(例如,如果选中了一个复选框,则插入一个额外的页面)。
    • 我认为这在某些情况下会很好......但不适用于这个特定的情况。对于我的表单,所有这些控件都表示单个 DB 行中的数据。使用这个多页解决方案,我必须为每个步骤一遍又一遍地加载/保存这些数据,或者修改一些 Session 对象。这里有点破坏交易。不过谢谢你的建议。我确实喜欢这些步骤的封装......肯定会很方便。
    【解决方案3】:

    我已经多次使用向导控件来处理您描述的这种情况。它需要一些研究,就像其他任何东西一样,但可以提供良好的用户体验。应该在向导的每个步骤中显示的控件在 WizardStep 模板中声明,效果非常好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2015-07-10
      • 2019-03-13
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多