c# - 创建新用户时的结果文本不显示
问题描述
当我创建一个新用户时,我希望它显示是否存在用户名已经存在或密码太短等错误。所以我有这个代码:
protected void CreateAccountButton_Click(object sender, EventArgs e)
{
MembershipCreateStatus p = MembershipCreateStatus.Success;
System.Web.Security.Membership.CreateUser(Username.Text, Password.Text,
Email.Text, passwordQuestion, SecurityAnswer.Text, true, out p);
switch (p)
{
case MembershipCreateStatus.Success:
CreateAccountResults.Text = "The user account was successfully created!";
break;
// other cases omitted for brevity
default:
CreateAccountResults.Text =
"There was an unknown error; the user account was NOT created.";
break;
}
}
它创建用户但不显示任何错误消息。例如,当我创建一个与已创建用户名相同且密码长度为 4 个字符的用户并单击创建时,没有任何反应,用户没有被创建,也没有显示错误消息。当我创建一个不存在的用户和一个强密码然后创建用户但不显示“用户已成功创建”消息
这是我正在使用的表格:
<p>
<asp:Label runat="server" ID="InvalidUserNameOrPasswordMessage"
Visible="false" EnableViewState="false" ForeColor="Red">
</asp:Label>
</p>
Username:<br />
<div class="wrap-input100 validate-input" data-validate="Valid Username is required">
<asp:TextBox ID="Username" runat="server" class="input100"></asp:TextBox>
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-user" aria-hidden="true"></i>
</span>
</div>
<br />
<br />
Password:<br />
<div class="wrap-input100 validate-input" data-validate="Valid Password is required">
<asp:TextBox ID="Password" TextMode="Password" runat="server" class="input100"></asp:TextBox>
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-lock" aria-hidden="true"></i>
</span>
</div>
<br />
<br />
Email Address:<br />
<div class="wrap-input100 validate-input" data-validate="Valid Email Address is required">
<asp:TextBox ID="Email" runat="server" class="input100"></asp:TextBox>
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-envelope" aria-hidden="true"></i>
</span>
</div>
<br />
<br />
Job Title:<br />
<div class="wrap-input100 validate-input" data-validate="Valid Job Title is required">
<asp:Label runat="server" ID="SecurityQuestion"></asp:Label>
<asp:TextBox ID="SecurityAnswer" runat="server" class="input100"></asp:TextBox>
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-user" aria-hidden="true"></i>
</span>
</div>
<br />
<br />
<asp:Button ID="CreateAccountButton" runat="server"
Text="Create the User Account"
OnClick="CreateAccountButton_Click"
class="login100-form-btn" />
<p>
<asp:Label ID="CreateAccountResults" runat="server"></asp:Label>
</p>
我不确定为什么这不起作用?
解决方案
您应该为异常“准备”并从其状态属性中读取用户创建的结果。
文档中的正确用法:
public void CreateUser_OnClick(object sender, EventArgs args)
{
try
{
// Create new user.
MembershipUser newUser = Membership.CreateUser(UsernameTextbox.Text, PasswordTextbox.Text);
// If user created successfully, set password question and answer (if applicable) and
// redirect to login page. Otherwise return an error message.
if (Membership.RequiresQuestionAndAnswer)
{
newUser.ChangePasswordQuestionAndAnswer(PasswordTextbox.Text,
PasswordQuestionTextbox.Text,
PasswordAnswerTextbox.Text);
}
Response.Redirect("login.aspx");
}
catch (MembershipCreateUserException e)
{
Msg.Text = GetErrorMessage(e.StatusCode);
}
catch (HttpException e)
{
Msg.Text = e.Message;
}
}
public string GetErrorMessage(MembershipCreateStatus status)
{
switch (status)
{
case MembershipCreateStatus.DuplicateUserName:
return "Username already exists. Please enter a different user name.";
case MembershipCreateStatus.DuplicateEmail:
return "A username for that email address already exists. Please enter a different email address.";
case MembershipCreateStatus.InvalidPassword:
return "The password provided is invalid. Please enter a valid password value.";
case MembershipCreateStatus.InvalidEmail:
return "The email address provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidAnswer:
return "The password retrieval answer provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidQuestion:
return "The password retrieval question provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidUserName:
return "The user name provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.ProviderError:
return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
case MembershipCreateStatus.UserRejected:
return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
default:
return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
}
}