protected void btnCreateUser_Click(object sender, EventArgs e) { MembershipCreateStatus createStatus; MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtEmail.Text, ddlCountry.Text, txtHomepage.Text, txtPassword.Text, true, out createStatus); switch (createStatus) { case MembershipCreateStatus.Success: lblResult.Text = "The user account was successfully created!"; break; case MembershipCreateStatus.DuplicateUserName: lblResult.Text = "That username already exists."; break; case MembershipCreateStatus.InvalidUserName: lblResult.Text = "Please enter a VALID username."; break; case MembershipCreateStatus.DuplicateEmail: lblResult.Text = "A user with that Email address already exists."; break; case MembershipCreateStatus.InvalidEmail: lblResult.Text = "Please enter a VALID email address."; break; case MembershipCreateStatus.InvalidPassword: lblResult.Text = "The password entered is invalid. Please enter a passoword with at least 7 cahacters and one non-alphanumeric."; break; default: lblResult.Text = "Unknown Error: Account NOT created."; break; } }
Så er spørgsmålet, hvordan jeg sammensætter dette på en rigtig måde. Så det ligger smukt i min tabel (aspnet_Users). Lige nu ligger dataen hulter til bulter.
Jeg kan se at du vælger at gemme informationer om en bruger på felter der er beregnet til spørgsmål og svar i tilfælde af at man vil "recover" et password, eller har du lavet din egen create funktion?
Jeg fil foreslå dig at bruge user profil hvis du vil gemme yderlig data om en bruger.
til din mempership provider i din web.config og bruger den CreateUser method som kun skal bruge brugernavn og password (og evt. email hvis du kræver unikke emails)
Det er svært at sige når jeg ikke ved hvordan du har opsat din membership provider i web.config'en, men hvis du vil have en status på din create så vil det være i retningen af:
Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtMail.Text, "", "", true, out createStatus);
Tak weis! jeg får fejl ved InvalidQuestion og InvalidAnswer! Hvad gør jeg galt. kan ikke udfører registreringen!
koden:
protected void btnCreateUser_Click(object sender, EventArgs e) { MembershipCreateStatus createStatus; MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, "", "", true, out createStatus); switch (createStatus) { case MembershipCreateStatus.Success: lblResult.Text = "The user account was successfully created!"; break; case MembershipCreateStatus.DuplicateUserName: lblResult.Text = "That username already exists."; break; case MembershipCreateStatus.InvalidUserName: lblResult.Text = "Please enter a valid username."; break; case MembershipCreateStatus.DuplicateEmail: lblResult.Text = "A user with that email address already exists."; break; case MembershipCreateStatus.InvalidEmail: lblResult.Text = "Please enter a valid email address."; break; case MembershipCreateStatus.InvalidPassword: lblResult.Text = "The password entered is invalid. please enter a passoword with at least 7 cahacters and one non-alphanumeric."; break; case MembershipCreateStatus.InvalidQuestion: lblResult.Text = "question"; break; case MembershipCreateStatus.InvalidAnswer: lblResult.Text = "answer"; break; default: lblResult.Text = "unknown error: account not created."; break; } }
Du kan prøve det her, jeg har ikke testet det, men udfra alm. tankegang burde det virke!
try { MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text); } catch (MembershipCreateUserException ex) { switch (ex.StatusCode) { case MembershipCreateStatus.Success: lblResult.Text = "The user account was successfully created!"; break; case MembershipCreateStatus.DuplicateUserName: lblResult.Text = "That username already exists."; break; case MembershipCreateStatus.InvalidUserName: lblResult.Text = "Please enter a valid username."; break; case MembershipCreateStatus.DuplicateEmail: lblResult.Text = "A user with that email address already exists."; break; case MembershipCreateStatus.InvalidEmail: lblResult.Text = "Please enter a valid email address."; break; case MembershipCreateStatus.InvalidPassword: lblResult.Text = "The password entered is invalid. please enter a passoword with at least 7 cahacters and one non-alphanumeric."; break; case MembershipCreateStatus.InvalidQuestion: lblResult.Text = "question"; break; case MembershipCreateStatus.InvalidAnswer: lblResult.Text = "answer"; break; default: lblResult.Text = "unknown error: account not created."; break; } }
Nej ikke hvis brugeren blev oprettet korrekt, men nu kender jeg ikke M$ validering af input i deres CreateUser funktion med 7 parametere. Hvis de mener at et tomt spørgsmål eller svar er forkert så er det naturligt at komme med en exception på det!
Og ja der er behov for lidt refactoring af koden, men vil helst ikke forvirrer mere i mine svar end hvad godt er, så hellere sørge for at det kommer til at virke, og så når man får styr på det der foregår kan man begynde at optimere, men det handler det her spørgsmål jo ikke om!
Den viser ikke den besked fordi den ikke smider en exception når brugeren er korrekt oprettet, og derfor kommer den ikke ind i catch.
Til at lave flere steps så kan ud bruge <asp:wizard> controlen, den har jeg dog ikke arbejdet med, men der findes helt sikkert en masse tutorials på nettet om den!
lblResult.Text = "The user account was successfully created!";
lige efter du har kaldt create funktionen!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.