首页 > 解决方案 > 创建新用户时的结果文本不显示

问题描述

当我创建一个新用户时,我希望它显示是否存在用户名已经存在或密码太短等错误。所以我有这个代码:

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>

我不确定为什么这不起作用?

标签: c#asp.net

解决方案


您应该为异常“准备”并从其状态属性中读取用户创建的结果。

文档中的正确用法:

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.";
   }
}

推荐阅读