0

ユーザーが新しいアカウントを登録するための CreateUserWizard があります。

テキスト フィールドと必要なフィールド バリデータを追加しました

ただし、空のユーザー名で登録ボタンをクリックすると、エラーが発生します。

例外の詳細: System.ArgumentException: メンバーのユーザー名は空の文字列とは異なる必要があります

パラメータ名: 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);
        }
}

(ユーザー名フィールドを使用して電子メールを取得し、電子メールを使用してログインすることに注意してください)

4

1 に答える 1

0

「OnCreatedUser」メソッド内でユーザー名を設定しているようです。これは、ウィザードがそのユーザーの作成を試みた後に発生します。事前に起動される「OnCreatingUser」メソッド内でユーザー名を設定する必要があります。

クイックウィンとして、これを使用してみてください:

... 
<asp:CreateUserWizard ID="cuwRegister" RequireEmail="false" OnContinueButtonClick="cuwRegister_ContinueButtonClick" OnCreatingUser="cuwRegister_CreatedUser" runat="server">
   <WizardSteps>
...
于 2013-07-17T12:53:54.997 に答える