2013-04-04 66 views
0

我有一个CreateUserWizard供用户注册新帐户。用户名验证在CreateUserWizard中不起作用

我已经加入我的文本字段和所需字段验证

然而,当我点击注册与空的用户名按钮,我得到错误:

Exception Details: System.ArgumentException: The username of a Member must be different from an emptry string

Parameter name: loginName

用户名字段有它的RequiredFieldValidator所以它应该工作。我还添加了

UserNameRequiredErrorMessage

属性向导但它没有区别。

loginName在上面的错误消息中提到的是一个用于LoginView的控件。我在同一页上有这个,但是在注册CreateUserWizard时没有使用它。

这是怎么发生的?

我的代码:

<asp:Panel ID="pnlRegister" runat="server"> 

<asp:CreateUserWizard ID="cuwRegister" RequireEmail="false" 
OnContinueButtonClick="cuwRegister_ContinueButtonClick" 
    OnCreatedUser="cuwRegister_CreatedUser" 
runat="server"> 
<WizardSteps> 
    <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"> 
<ContentTemplate> 
<asp:ValidationSummary ID="uxValSummaryRegister" DisplayMode="BulletList" runat="server" ValidationGroup="CreateUserWizard" ForeColor="#FF5555" /> 
<asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal> 

      <div class="row"> 
       <label>Email</label> 
       <asp:TextBox ID="UserName" runat="server" /> 
     <asp:requiredfieldvalidator runat="server" 
         controltovalidate="UserName" 
         tooltip="Email is a required" 
         id="reqEmail" 
         validationgroup="CreateUserWizard" 
         errormessage="Email is a required" Display="Dynamic"> 
         * 
         </asp:requiredfieldvalidator> 
       <asp:RegularExpressionValidator ID="revEmail" runat="server" 
        ControlToValidate="UserName" 
        ErrorMessage="Enter correct email address" 
        ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">* 
       </asp:RegularExpressionValidator> 
      </div> 
      <div class="row"> 
       <label><umbraco:Macro Item="Confirm email" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="ConfirmEmail" runat="server" /> 
     <asp:requiredfieldvalidator runat="server" 
         controltovalidate="ConfirmEmail" 
         tooltip="Confirm Email address is a required" 
         id="reqConfirmEmail" 
         validationgroup="CreateUserWizard" 
         errormessage="Confirm Email address is a required"> 
         * 
         </asp:requiredfieldvalidator> 
       <asp:CompareValidator runat="server" 
        id="cmpNumbers" 
        controltovalidate="ConfirmEmail" 
        controltocompare="UserName" 
        operator="Equal" 
        type="String" 
        errormessage="Email and Confirm Email do not match" /> 
      </div> 
      <div class="row"> 
       <label><umbraco:Macro Item="Password" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="Password" runat="server" TextMode="Password" /> 
     <asp:requiredfieldvalidator runat="server" 
         controltovalidate="Password" 
         tooltip="Password is a required" 
         id="reqPassword" 
         validationgroup="CreateUserWizard" 
         errormessage="Password is a required"> 
         * 
         </asp:requiredfieldvalidator> 
      </div> 
      <div class="row"> 
       <label><umbraco:Macro Item="Confirm password" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="ConfirmPassword" runat="server" TextMode="Password" /> 
     <asp:requiredfieldvalidator runat="server" 
         controltovalidate="ConfirmPassword" 
         tooltip="Confirm Password is a required" 
         id="Requiredfieldvalidator1" 
         validationgroup="CreateUserWizard" 
         errormessage="Confirm Password is a required"> 
         * 
         </asp:requiredfieldvalidator> 
       <asp:CompareValidator runat="server" 
        id="CompareValidator1" 
        controltovalidate="ConfirmPassword" 
        controltocompare="Password" 
        operator="Equal" 
        type="String" 
        errormessage="Password and Confirm Password do not match" /> 
      </div> 

      <div class="row"> 
       <label><umbraco:Macro Item="First name" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="txtFirstName" runat="server" /> 
      </div> 
      <div class="row"> 
       <label><umbraco:Macro Item="Surname" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="txtSurname" runat="server" /> 
      </div> 
      <div class="row"> 
       <label><umbraco:Macro Item="Date of birth" Alias="Dictionary-Item" runat="server" /></label> 
       <asp:TextBox ID="DOB" runat="server" /> 
     <asp:requiredfieldvalidator runat="server" 
         controltovalidate="DOB" 
         tooltip="Date of birth is a required" 
         id="Requiredfieldvalidator2" 
         validationgroup="CreateUserWizard" 
         errormessage="Date of birth is a required"> 
         * 
         </asp:requiredfieldvalidator> 
      </div> 

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

,并在后面的代码:

protected void cuwRegister_CreatedUser(object sender, EventArgs e) 
{ 
    string email = cuwRegister.UserName; 
    string username = cuwRegister.UserName; 
    string password = cuwRegister.Password; 
    Page.Validate("CreateUserWizard"); 
    if(Page.IsValid) 
     CreateUser(email, username, password); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    btnRegister.Text = cuwRegister.CreateUserButtonText = umbraco.library.GetDictionaryItem("Register"); 
    cuwRegister.DuplicateUserNameErrorMessage = umbraco.library.GetDictionaryItem("Duplicated email"); 
    cuwRegister.DuplicateEmailErrorMessage = umbraco.library.GetDictionaryItem("Duplicated email"); 
    cuwRegister.InvalidEmailErrorMessage = umbraco.library.GetDictionaryItem("Email address incorrect"); 
    cuwRegister.InvalidPasswordErrorMessage = umbraco.library.GetDictionaryItem("Password incorrect"); 
    cuwRegister.EmailRequiredErrorMessage = umbraco.library.GetDictionaryItem("Email required"); 
    cuwRegister.PasswordRequiredErrorMessage = umbraco.library.GetDictionaryItem("Password required"); 
    cuwRegister.ConfirmPasswordCompareErrorMessage = umbraco.library.GetDictionaryItem("Password not matching"); 
    cuwRegister.UserNameRequiredErrorMessage = umbraco.library.GetDictionaryItem("Password not matching"); 


    Login lwPanelLogin = (Login)lwLogin.FindControl("lwLoginPanel"); 
    if (lwPanelLogin != null) 
    { 
     lwPanelLogin.TitleText = umbraco.library.GetDictionaryItem("Already registered? Log in here"); 
     lwPanelLogin.LoginButtonText = umbraco.library.GetDictionaryItem("Login"); 
     lwPanelLogin.RememberMeText = umbraco.library.GetDictionaryItem("Remember me next time"); 
     lwPanelLogin.PasswordLabelText = umbraco.library.GetDictionaryItem("Password"); 
     lwPanelLogin.UserNameLabelText = "Email"; 
    } 
} 

protected void CreateUser(string email, string username, string password) 
{ 
    bool isLoggedIn = System.Web.HttpContext.Current.User.Identity.IsAuthenticated; 
    if (Membership.GetUserNameByEmail(email) == null) 
    { 
     MembershipUser member = Membership.CreateUser("aaa", password, email); 
    } 

    if(!isLoggedIn) 
     if (System.Web.Security.Membership.ValidateUser(username, password)) 
     { 
      FormsAuthentication.SetAuthCookie(username, true); 
     } 
} 

(请注意,我用的用户名栏中获取电子邮件,然后电子邮件是用来登录)

回答

0

它看起来li您可以在“OnCreatedUser”方法中设置您的用户名。在之后,这将被解雇向导尝试创建该用户。 您需要在预先启用的“OnCreatingUser”方法中设置您的用户名。

作为速赢,尝试使用这样的:

... 
<asp:CreateUserWizard ID="cuwRegister" RequireEmail="false" OnContinueButtonClick="cuwRegister_ContinueButtonClick" OnCreatingUser="cuwRegister_CreatedUser" runat="server"> 
    <WizardSteps> 
...