Question

I have a hyperlink which is build inside a LoginView and the text is set to "forgot password".

Upon clicking the hyperlink, the password recovery control will pops up (with the implementation of AJAX ModalPopUp extender).The modalpopup work well. But the problem is, after entering username and in step2 after the user had answered his/her security answer and when on hit on the "submit" button, it does not proceed to step 3 and no email was send.

However, the password was changed in the database (I tried to log in with the username and old password and it did not work).

Here is the code at 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="bedofrosesptltd@gmail.com" 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>

Here is the code behind:

 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);
        }
  • If I remove the password recovery control from the ModalPopUp, the whole control work perfectly. Only when it is build inside the ModalPopUp, it could not proceed to the last step and no email was send. Yet the user could not logged in when his/her username and old password.
Was it helpful?

Solution

The most probable reason could be when your form is opened up in Model Popup, the form (i.e Password Recovery Form) no more remains inside FORM tag. So you need to do something similar to

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

It is moving the Popup inside FORM DOM. And when your form is not inside FORM DOM then it's data won't be posted back to server.

Ref: jQuery UI Dialog with ASP.NET button postback

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top