2013-08-27 20 views
15

Tôi được thừa kế một dự án cung cấp cho người dùng các lỗi trên trong khi cố gắng lấy mất mật khẩu trong một dự án Net 4.0. Tôi bước qua và tìm thấy điểm rắc rối, nhưng vấn đề là, các giá trị được tạo ra có vẻ đúng vì vậy tôi không lý do tại sao lỗi xảy ra. Cảm ơn trước cho bất kỳ ai có thể xem mã sau và giúp tôi tìm hiểu cách khắc phục. Hãy cho tôi biết nếu cần thêm thông tin. Tôi đã xem xét tất cả mọi thứ tôi có thể tìm thấy nhưng không có gì cho tôi manh mối tôi có thể sử dụng. Vấn đề là tôi không thể theo dõi được nơi mà sự kết hợp khóa/giá trị nên nhập vào, và tôi cũng không biết cách thêm nó vào một lần nào. Mã sau.chính đưa ra là không có mặt trong từ điển

tôi đã đăng một cuộc thảo luận tương tự tại http://forums.asp.net/t/1926444.aspx/1?given+key+was+not+present+in+the+dictionary nhưng không ai có biết làm thế nào để giúp tôi.

void EmailUser(User user) 
{ 
    user.ChangePasswordID = Guid.NewGuid(); 
    user.Save(); 
    MailMessage email = new MailMessage(); 
    //problem line below 
    email.From = new MailAddress(Settings.LostPasswordEmailFrom); 
    email.To.Add(new MailAddress(uxEmail.Text)); 
    email.Subject = Settings.LostPasswordSubject; 
    email.Body = EmailTemplateService.HtmlMessageBody(EmailTemplates.MembershipPasswordRecovery, new { Body = Settings.LostPasswordText, BeginRequired = "", EndRequired = "", UserName = user.Name, GUID = user.ChangePasswordID.ToString() }); 
    email.IsBodyHtml = true; 
    SmtpClient client = new SmtpClient(); 
    client.Send(email); 

    uxSuccessPH.Visible = true; 
    uxQuestionPanel.Visible = false; 
    uxUserInfoPanel.Visible = false; 
    uxUserNameLabelSuccess.Text = uxEmail.Text; 
} 

/// <summary> 
/// The address that the lost password email will be sent from 
/// </summary> 
public static string LostPasswordEmailFrom 
{ 
    get 
    { 
     if (String.IsNullOrEmpty(SiteSettings.GetSettingKeyValuePair()["LA_MembershipProvider_lostPasswordEmailFrom"])) 
      return Globals.Settings.FromEmail; 
     return SiteSettings.GetSettingKeyValuePair()["LA_MembershipProvider_lostPasswordEmailFrom"]; 
    } 
} 
+0

bạn có thể chia sẻ mã của lớp 'SiteSettings' không? – achakravarty

+24

-3 về câu hỏi của người dùng mới, thực sự? Nếu bạn có mong muốn downvote một câu hỏi, có lẽ bạn có thể giải thích những gì ông có thể làm để cải thiện nó, quay trở lại để xem nếu anh ta cải thiện nó và biến nó thành +1 như một sự khuyến khích. Đây là cách cộng đồng đang xây dựng. – AutomatedChaos

+0

Achakravarty, tôi làm cách nào để chia sẻ mã đó? Hộp nhận xét này có giới hạn về số ký tự, ít hơn nhiều so với mã tôi cần nhập. – muybn

Trả lời

20

khi bạn gọi SiteSettings.GetSettingKeyValuePair()["LA_MembershipProvider_lostPasswordEmailFrom"]) nếu không có khóa có tên LA_MembershipProvider_lostPasswordEmailFrom bạn sẽ nhận được "Chìa khóa trao đã không có mặt trong từ điển" lỗi. Những gì bạn có thể làm là kiểm tra xem khóa có tồn tại trước hay không và sau đó nhận giá trị. Bạn có thể làm như bên dưới

public static string LostPasswordEmailFrom 
{ 
    get 
    { 
     var kvp = SiteSettings.GetSettingKeyValuePair(); 

     if (kvp == null || !kvp.ContainsKey("LA_MembershipProvider_lostPasswordEmailFrom")) 
      return Globals.Settings.FromEmail; 
     return kvp["LA_MembershipProvider_lostPasswordEmailFrom"]; 
    } 
} 
+0

Cảm ơn, Damith, đoạn mã trên dường như đã thực hiện nó. Bạn có thể giải thích sự khác biệt? Làm thế nào để cho nó một phiếu thuận lợi? – muybn

+1

@muybn Rất vui khi câu trả lời của tôi đã giúp bạn. cập nhật với các chi tiết như bạn yêu cầu. – Damith

Các vấn đề liên quan