2010-05-13 69 views
1

我是ASP和C#的新手,我剛剛創建了我的第一個使用CreateUserWizard會員供應商的註冊表單,並設置了很好的驗證器,來自「用戶名」的Appart。如果用戶名被採納,頁面只是刷新,並且沒有錯誤出現,如果somone能指出我可能會出錯的地方,那麼真的很棒。ASP CreateUserWizard會員供應商註冊用戶驗證

這裏是我當前的代碼:

SCRIPT

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e) 
{ 
    /* User is created and setting extra parameters to profile */ 
    TextBox UserNameTextBox = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("UserName"); 
    string username = UserNameTextBox.Text; 

    MembershipUser User = Membership.GetUser(username); 
    umbraco.cms.businesslogic.member.Member member = new umbraco.cms.businesslogic.member.Member((int)User.ProviderUserKey); 

    /* Here you can access properties for the member */ 
    umbraco.cms.businesslogic.property.Property FullNameProperty = member.getProperty("fullname"); // Property alias 
    TextBox FullNameTextBox = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("FullName"); 
    FullNameProperty.Value = FullNameTextBox.Text; 

    Roles.AddUserToRole(CreateUserWizard1.UserName, "NuneatonMember"); 
} 
protected void CreateUserWizard1_ContinueButtonClick(object sender, EventArgs e) 
{ 
    Response.Redirect("/member-area.aspx"); 
} 

內容

<form runat="server"> 
<asp:CreateUserWizard ID="CreateUserWizard1" OnContinueButtonClick="CreateUserWizard1_ContinueButtonClick" OnCreatedUser="CreateUserWizard1_CreatedUser" runat="server"> 
    <WizardSteps> 
     <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"> 
    <ContentTemplate> 

    First Name :<asp:TextBox Runat="server" ID="FullName" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="FullNameVal" runat="server" ControlToValidate="FullName" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <br/> 

    Last Name :<asp:TextBox Runat="server" ID="LastName" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="LastNameVal" runat="server" ControlToValidate="LastName" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <br/> 

    Username :<asp:TextBox Runat="server" ID="UserName" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="UserNameVal" runat="server" ControlToValidate="UserName" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <br/> 

    E-mail :<asp:TextBox Runat="server" ID="Email" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="EmailVal" runat="server" ControlToValidate="Email" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <asp:RegularExpressionValidator id="valRegEx" runat="server" ControlToValidate="Email" ValidationExpression=".*@.*\..*" ErrorMessage="* is not a valid e-mail address." ValidationGroup="CreateUserWizard1" display="dynamic"></asp:RegularExpressionValidator> 
    <br/> 

    Password :<asp:TextBox Runat="server" ID="Password" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="PasswordVal" runat="server" ControlToValidate="Password" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <br/> 

    Confirm Password :<asp:TextBox Runat="server" ID="ConfirmPassword" CssClass="user_info"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="PConfirmVal" runat="server" ControlToValidate="ConfirmPassword" Display="Dynamic" ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
    <br/> 

    <asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword" Display="Dynamic" ValidationGroup="CreateUserWizard1" ErrorMessage="Foul: Password and Confirmation Password do not match. Fix them."></asp:CompareValidator> 

    <asp:literal runat="server" enableviewstate="true" id="FailureText"></asp:literal> 

    </ContentTemplate> 
    </asp:CreateUserWizardStep> 
     <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server"></asp:CompleteWizardStep> 
    </WizardSteps> 
</asp:CreateUserWizard> 

+0

您是否在您的web.config會員供應商設置中指定電子郵件地址是唯一的? – azamsharp 2010-05-13 15:01:53

+0

Yardstermister 2010-05-13 15:05:43

回答

1

您需要添加一個錯誤處理程序。

<asp:CreateUserWizard ID="CreateUserWizard1" 
     OnContinueButtonClick="CreateUserWizard1_ContinueButtonClick" 
     OnCreatedUser="CreateUserWizard1_CreatedUser" runat="server" 
     OnCreateUserError="createUserWizard_CreateUserError"> 

並舉例說明如何實現它。

protected void createUserWizard_CreateUserError(object sender, CreateUserErrorEventArgs arguments) 
{ 
    LogCreateUserError(arguments.CreateUserError, "no user info"); 
} 

private void LogCreateUserError(MembershipCreateStatus status, string username) 
{ 
    string reasonText = status.ToString(); 

    switch (status) 
    { 
     case MembershipCreateStatus.DuplicateEmail: 
     case MembershipCreateStatus.DuplicateProviderUserKey: 
     case MembershipCreateStatus.DuplicateUserName: 

      reasonText = "The user details you entered are already registered."; 
      break; 

     case MembershipCreateStatus.InvalidAnswer: 
     case MembershipCreateStatus.InvalidEmail: 
     case MembershipCreateStatus.InvalidProviderUserKey: 
     case MembershipCreateStatus.InvalidQuestion: 
     case MembershipCreateStatus.InvalidUserName: 
     case MembershipCreateStatus.InvalidPassword: 

      reasonText = string.Format("The {0} provided was invalid.", status.ToString().Substring(7)); 
      break; 
     default: 
      reasonText = "Due to an unknown problem, we were not able to register you at this time"; 
      break; 

    } 
    //DO whatever with it.. .... 

} 
+0

謝謝尼克斯這將工作,可能是愚蠢的問題,但我將如何將reasonText輸出到(HTML)驗證消息。 – Yardstermister 2010-05-13 17:00:35

+0

@NikG如果您認爲內容有問題並請海報修復,請發表評論。 – Rotem 2012-12-05 12:28:47

+0

@Rotem - 不用擔心,我會在將來做到這一點。它也可能值得他們在底部添加它,這將回答上面的Yardsermister的問題:if(!string.IsNullOrEmpty(reasonText))var FailureText =(Literal)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl(「FailureText」); FailureText.Text = reasonText; } – NikG 2012-12-05 12:35:13