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

C# 滚动我自己的ASP.NET注册向导,c#,asp.net,C#,Asp.net,我想这是一个很难回答的问题,不必坐下来看所有的源代码,但我想我还是会发布它,看看大家对我们公司正在使用的流程是否有任何概念上的想法 我目前正在做的项目是我们最终用户的自我注册页面。以前,我们为每个不同的注册过程使用了3个单独的ASP.NET向导控件。我们的客户一致表示,流程非常混乱,他们不知道应该完成三个不同流程中的哪一个。因此,在被要求将三个应用程序编译成一个应用程序后,我很快发现注册向导控件的可扩展性不强。新流程需要非常动态,因此静态、单路径向导无法满足需要 因此,为了使注册过程更加动态,我

我想这是一个很难回答的问题,不必坐下来看所有的源代码,但我想我还是会发布它,看看大家对我们公司正在使用的流程是否有任何概念上的想法

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

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

例如:

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

  • 正常注册
  • 帐户更新注册
  • 获取禁用的用户帐户注册
  • 用户正在完成的注册类型是在完成注册时确定的。例如,当一个用户在那里输入帐号后,我确定他们不是新用户,所以他们要么是更新,要么是重新启用。此路径存储在会话状态下的注册类型变量中

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

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

    无论如何,如果这让人困惑的话,我再次道歉。我主要希望有人会过来,做过类似的事情,也许能给我一些建议

    提前感谢你的帮助


    CJAM

    向导控件基于多视图控件,它基本上提供了一种一次显示一个(且仅一个)视图的方法。唯一的区别是,您需要使用“多视图”手动控制导航,因此允许您以非线性方式完成这些步骤

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


    看看

    这不是一个我能回答的问题。如果你是这么问的话,我觉得这是一个不错的方法。你有什么特别的问题吗?
    
    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);
    }