2013-08-27 18 views
15

Odziedziczyłem projekt, który daje użytkownikom powyższy błąd podczas próby odzyskania utraconego hasła w projekcie .Net 4.0. Przeszedłem i znalazłem miejsce na problem, ale problem polega na tym, że generowane wartości wydają się właściwe, więc nie wiem, dlaczego wystąpił błąd. Z góry dziękuję wszystkim, którzy mogą obejrzeć poniższy kod i pomóc mi dowiedzieć się, jak to naprawić. Daj mi znać, jeśli potrzebujesz więcej informacji. Przejrzałem wszystko, co mogłem znaleźć, ale nic nie dało mi wskazówek, których mogłem użyć. Problem polega na tym, że nie mogę po prostu wyśledzić, gdzie powinna się znaleźć kombinacja klucz/wartość, ani też nie wiem, jak to zrobić, gdy to zrobię. Kod jest następujący.dany klucz nie był obecny w słowniku

Opublikowałem podobną dyskusję pod http://forums.asp.net/t/1926444.aspx/1?given+key+was+not+present+in+the+dictionary, ale nikt nie wiedział, jak mi pomóc.

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

Czy możesz również udostępnić kod klasy "SiteSettings"? – achakravarty

+24

-3 na pytanie nowego użytkownika, naprawdę? Jeśli masz ochotę udzielić ci odpowiedzi na pytanie, może mógłbyś wyjaśnić, co mógł zrobić, aby ją poprawić, wrócić, aby sprawdzić, czy poprawił ją i przekształcić w +1 jako zachętę. W ten sposób budowane są społeczności. – AutomatedChaos

+0

Achakravarty, jak udostępnić ten kod? To pole komentarza ma ograniczenie liczby znaków, które jest znacznie mniejsze niż kod, który muszę wprowadzić. – muybn

Odpowiedz

20

kiedy zadzwonić SiteSettings.GetSettingKeyValuePair()["LA_MembershipProvider_lostPasswordEmailFrom"]) jeśli nie ma klucza nazwie LA_MembershipProvider_lostPasswordEmailFrom dostaniesz „Dany klucz nie był obecny w słowniku” błędu. Możesz jedynie sprawdzić, czy klucz istnieje najpierw, a następnie uzyskać wartość. Możesz zrobić, jak poniżej:

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

Dzięki, Damith, powyższy kod zdaje się to robić. Czy możesz wyjaśnić różnicę? Jak mam go pozytywnie głosować? – muybn

+1

@muybn Cieszę się, że moja odpowiedź ci pomogła. zaktualizowane o szczegóły zgodnie z Twoim życzeniem. – Damith

Powiązane problemy