2012-06-29 63 views
0

我的網絡表單中有密碼恢復控件。 輸入所有必要的特定信息後,電子郵件將發送到用戶的電子郵件帳戶。對象引用在發送URL時未設置爲對象的實例

這就像 - 如果用戶忘記他/她的密碼,發送密碼更改鏈接到用戶的電子郵件帳戶,而不是一個新的密碼。

但是,點擊提交按鈕後,「對象引用未設置爲對象的實例」。出現錯誤。

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. And the error occurred on line 66. 

Source Error: 

Line 64:   System.Web.UI.WebControls.Login Login1 = (System.Web.UI.WebControls.Login)LoginView1.FindControl("Login1"); 
Line 65:   MembershipUser pwRecover = Membership.GetUser(Login1.UserName); 
**Line 66:   Guid userInfoId2 = (Guid)pwRecover.ProviderUserKey;** 

以下爲在郵件正文發送URL的背後代碼:

protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e) 
{ 

    System.Web.UI.WebControls.Login Login1 = (System.Web.UI.WebControls.Login)LoginView1.FindControl("Login1"); 
    MembershipUser pwRecover = Membership.GetUser(Login1.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 = "/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); 
} 

回答

1

問題是pwRecover永遠不會設置。即問題就出在這裏:

MembershipUser pwRecover = Membership.GetUser(Login1.UserName); 

Membership.GetUser沒有發現用於Login1.UserName用戶;

試着在這一行上設置一個斷點來找出Login1.UserName的實際內容。然後在數據庫中查找該用戶名。

+0

嗨,我已經找出問題所在。 我從錯誤的地方檢索用戶名。 我應該從密碼恢復控制的第一步檢索用戶名,而不是從登錄用戶名文本框中檢索用戶名。 由於我沒有在登錄內輸入任何內容,這就是爲什麼它會出現這個錯誤。 – user1467175

相關問題