Member 9331278 Ответов: 1

Я останавливаю выполнение и возвращаюсь на ту же страницу по возможности сохраняя данные


Я разрабатываю что-то для компании, и пользователь должен зарегистрироваться, используя адрес электронной почты компании. "someName@company.lc"

Я использую значение по умолчанию asp.net 2012 регистрация учетной записи.

Я хочу, чтобы когда пользователь помещал информацию в текстовое поле id=username, то если оно не содержит @Company.lc, чтобы отправить им сообщение с просьбой использовать правильный адрес электронной почты
и дать им возможность изменить это.

В настоящее время он показывает сообщение, но продолжает продолжать выполнение.

Что я уже пробовал:

<WizardSteps>
           <asp:CreateUserWizardStep runat="server" ID="RegisterUserWizardStep">
               <ContentTemplate>


                   <p class="message-info">
                       Passwords are required to be a minimum of <%: Membership.MinRequiredPasswordLength %> characters in length.
                   </p>

                   <p class="validation-summary-errors">
                       <asp:Literal runat="server" ID="ErrorMessage" />
                   </p>

                   <fieldset>
                       <legend>Registration Form</legend>
                       <ol>
                           <li>
                               <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
                               <asp:TextBox runat="server" ID="UserName" />
                               <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName"
                                   CssClass="field-validation-error" ErrorMessage="The user name field is required." />
                           </li>
                           <li>
                               <asp:Label runat="server" AssociatedControlID="Email">Email address</asp:Label>
                               <asp:TextBox runat="server" ID="Email" TextMode="Email" />
                               <asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
                                   CssClass="field-validation-error" ErrorMessage="The email address field is required." />
                           </li>
                           <li>
                               <asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label>
                               <asp:TextBox runat="server" ID="Password" TextMode="Password" />
                               <asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
                                   CssClass="field-validation-error" ErrorMessage="The password field is required." />
                           </li>
                           <li>
                               <asp:Label runat="server" AssociatedControlID="ConfirmPassword">Confirm password</asp:Label>
                               <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" />
                               <asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
                                    CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The confirm password field is required." />
                               <asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
                                    CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." />
                           </li>
                       </ol>
                       <asp:Button runat="server" CommandName="MoveNext" Text="Register" />
                   </fieldset>
               </ContentTemplate>
               <CustomNavigationTemplate />




protected void RegisterUser_CreatedUser(object sender, EventArgs e)
        {
                               
            FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);

            MembershipUser newUser = Membership.GetUser(RegisterUser.UserName);
            //Make sure that the user have company email name@company.lc

            if (newUser.Email.Contains("@company.lc") != true)
            {
                MsgBox("Please used your Company email ending @company.lc ");
                            }
            else if (newUser.Email.Contains("@company.lc") == true)
            {
                SendEmail();
                string continueUrl = RegisterUser.ContinueDestinationPageUrl;
                if (!OpenAuth.IsLocalUrl(continueUrl))
                {
                    continueUrl = "~/";
                }
                Response.Redirect(continueUrl);
            }
        }
        public void MsgBox(String msg)
        {
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "Message Box", "<script language='javascript'> alert('" + msg + "')</script>");
        }

1 Ответов

Рейтинг:
7

Richard Deeming

То CreatedUser события после пользователь был создан. Это слишком поздно, чтобы отклонить недопустимое имя пользователя.

Вы мог используйте CreatingUser событие для проверки нового имени пользователя и установки e.Cancel = true если это не так.

Однако использовать его было бы гораздо чище то RegularExpressionValidator[^] для проверки входных данных:

<li>
    <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
    <asp:TextBox runat="server" ID="UserName" />
    <asp:RequiredFieldValidator runat="server" 
        ControlToValidate="UserName"
        CssClass="field-validation-error" 
        ErrorMessage="The user name field is required." 
    />
    <asp:RegularExpressionValidator runat="server"
        ControlToValidate="UserName"
        CssClass="field-validation-error"
        ErrorMessage="Please use your company email ending @company.lc"
        ValidationExpression="^[^@]+@company\.lc$"
    />
</li>

protected void RegisterUser_CreatedUser(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
        MembershipUser newUser = Membership.GetUser(RegisterUser.UserName);
        SendEmail();
        
        string continueUrl = RegisterUser.ContinueDestinationPageUrl;
        if (!OpenAuth.IsLocalUrl(continueUrl))
        {
            continueUrl = "~/";
        }
        
        Response.Redirect(continueUrl);
    }
}

Regexper: ^[^@]+@company\.lc$[^]
Язык Регулярных Выражений-Краткий Справочник[^]