滚动我自己的ASP.NET注册向导

时间:2009-01-07 22:05:59

标签: c# asp.net

我想这是一个非常难以回答的问题,无需坐下来查看所有源代码,但我想我还是会发布它,看看你是否对我们正在使用的过程有任何概念性的想法我的公司。

我目前正在开展的项目是我们最终用户的自助注册页面。以前,我们为每个不同的注册过程使用了3个单独的ASP.NET向导控件。我们的客户一致表示,这个过程非常令人困惑,他们从不知道应该完成哪三个不同的流程。因此,在被要求将三个应用程序编译成一个之后,我很快发现注册向导控件不是非常可扩展的。新流程需要非常动态,因此静态的,一条路径的向导无法满足需求。

因此,为了尝试创建一个更加动态的流程,我推出了自己的注册应用程序,该应用程序依赖于会话状态来引导用户完成注册。我目前设置它的方式是使用二进制标志值来进行注册中的可能步骤。然后我在SessionState中有一个整数值,我在用户完成一个步骤后更新。

实施例


const int accountNumberStep = 1;
const int userPassStep = 2;
const int usernameReclaimStep = 4;


/* code snipped */


// Code at the end of step Username/Password selection
// at the end of Username/Password selection step, update session state to record that step was finished
SessionState("stepsCompleted") = (int)SessionState("stepsCompleted") | userPassStep;


/* code snipped */


// Code at the beginning of each step to verify previous step was completed
if (!((int)SessionState("stepsCompleted") & userPassStep == userPassStep))
{
    RedirectToPreviousPage(previousStep:=userPassStep);
}

另一个主要部分(这是动态作品发挥作用的地方)是使用会话变量来跟踪他们正在经历的注册类型。换句话说,他们可能会有三种不同类型的注册:

  1. 正常注册
  2. 帐户更新注册
  3. 获取已禁用的用户帐户注册
  4. 用户正在完成的注册类型是在注册过程中确定的。例如,在用户输入帐号后,我确定他们不是新用户,因此他们将是更新或重新启用。此路径存储在会话状态的注册类型变量中。

    应用程序的最后一个主要部分跟踪文本框值,单选框选择等。这些都存储在SessionState中,因此如果在过程中的任何时候,用户希望备份一两步,他们不会失去他们输入的先前价值。这些值也用于注册过程的最后一步,即客户实际在后端数据库中注册。

    正如您所看到的,所有这些都与ASP.NET向导控件的作用类似。注册类型变量除外。这允许我在过程中的任何给定点将注册分支到不同的路径。

    无论如何,如果这令人困惑,请再次抱歉。我主要是希望有人会来做类似的事情,也许可以给我一些建议。

    提前感谢您的帮助。

    CJAM

1 个答案:

答案 0 :(得分:2)

向导控件基于MultiView控件,它基本上提供了一次显示一个(且仅一个)视图的方法。唯一的区别是您需要使用MultiView手动控制导航,因此允许您通过这些步骤进行非线性进展。

使用MultiView,所有视图中所有控件的值都将存储在ViewState中,因此无需将它们存储在Session中。每个视图中的按钮都可以回发,并且根据其他控件的值,您可以显示特定视图。

查看ASP.NET Quickstart on MultiView and View controls

相关问题