При восстановлении пароля не отправляется электронная почта.

У меня есть гиперссылка, созданная внутри LoginView, и для текста установлено значение «забыли пароль».

При нажатии на гиперссылку всплывает элемент управления восстановлением пароля (с реализацией расширителя AJAX ModalPopUp). Modalpopup работает хорошо. Но проблема в том, что после ввода имени пользователя и на шаге 2 после того, как пользователь ответил на свой ответ безопасности и при нажатии на кнопку «Отправить», он не переходит к шагу 3, и электронное письмо не отправляется.

Однако пароль был изменен в базе данных (я пытался войти с логином и старым паролем, и это не сработало).

Вот код в passwordrecover.aspx:

<asp:HyperLink ID="HyperLink2" runat="server" 
             style="margin-top:15px; text-align: right;">Forget Password</asp:HyperLink>

                        <asp:ModalPopupExtender 
                        ID="HyperLink2_ModalPopupExtender" 
                        runat="server" 
                        BackgroundCssClass="modalBackground" 
                        DynamicServicePath="" 
                        Enabled="True" 
                        PopupControlID="Panel1" 
                        TargetControlID="HyperLink2" >

                        </asp:ModalPopupExtender>

                        <asp:Panel ID="Panel1" 
                        runat="server" 
                        BackColor="White" 
                        BorderColor="Black" 
                        BorderStyle="Solid" 
                        BorderWidth="2px" 
                        Height="200px" 
                        Width="360px">

                         <asp:UpdatePanel ID="UpdatePanel1" runat="server">

                         <ContentTemplate>

                  <asp:PasswordRecovery ID="PasswordRecovery1" runat="server"
                    onsendingmail="PasswordRecovery1_SendingMail"> 

                <MailDefinition BodyFileName="~/EmailTemplates/ResetPassword.htm" 
                    From="[email protected]" IsBodyHtml="True" Priority="High" 
                    Subject="Request on the password reset for BedOfRoses's account.">
                </MailDefinition>

                </asp:PasswordRecovery>


                              </ContentTemplate>
                            </asp:UpdatePanel>

                            <asp:Button ID="btnClose" runat="server" Text="Close" />
                        </asp:Panel>

Вот код позади:

 protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e)
    {
        System.Web.UI.WebControls.PasswordRecovery PasswordRecovery1 = (System.Web.UI.WebControls.PasswordRecovery)LoginView1.FindControl("PasswordRecovery1");
            MembershipUser pwRecover = Membership.GetUser(PasswordRecovery1.UserName);
            Guid userInfoId2 = (Guid)pwRecover.ProviderUserKey;


            //Create an url that will link to a UserProfile.aspx and
            //accept a query string that is the user's id

            //setup the base of the url
            string domainName = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath;

            //setup the second half of the url
            string confirmationPage = "/Members/UserProfile.aspx?ID=" + userInfoId2.ToString();

            //combine to make the final url
            string url = domainName + confirmationPage;

            // Replace <%VerifyUrl%> placeholder with url value
            e.Message.Body = e.Message.Body.Replace("<%ResetPassword%>", url);
        }
  • Если я удалю элемент управления восстановлением пароля из ModalPopUp, весь элемент управления будет работать отлично. Только когда он создается внутри ModalPopUp, он не может перейти к последнему шагу, и электронное письмо не отправляется. Тем не менее, пользователь не мог войти в систему, когда его / ее имя пользователя и старый пароль.

person user1501969    schedule 07.07.2012    source источник


Ответы (1)


Наиболее вероятной причиной может быть то, что когда ваша форма открывается во всплывающем окне модели, форма (например, форма восстановления пароля) больше не остается внутри тега FORM. Итак, вам нужно сделать что-то похожее на

jQuery(function() {
   var dlg = jQuery("#dialog").dialog({ 
                        draggable: true, 
                        resizable: true, 
                        show: 'Transfer', 
                        hide: 'Transfer', 
                        width: 320, 
                        autoOpen: false, 
                        minHeight: 10, 
                        minwidth: 10 
          });
  dlg.parent().appendTo(jQuery("form:first"));
});

Он перемещает всплывающее окно внутри FORM DOM. И когда ваша форма не находится внутри FORM DOM, ее данные не будут отправлены обратно на сервер.

Ссылка: Диалог пользовательского интерфейса jQuery с обратной передачей кнопки ASP.NET

person Zeeshan Ali    schedule 07.07.2012