2013-08-27 35 views
15

我繼承了一個項目,在嘗試在.NET 4.0項目中檢索丟失的密碼時給用戶提供上述錯誤。我通過了一步,發現了問題點,但問題是,生成的值似乎是正確的,所以我不知道錯誤發生的原因。在此先感謝任何可以查看以下代碼的人,並幫助我瞭解如何解決此問題。讓我知道是否需要更多信息。我翻閱了所有我能找到的東西,但沒有給我提供我可以使用的線索。問題是我無法追蹤鍵/值組合應該進入的位置,我也不知道如何添加它。代碼如下。給定的關鍵字不存在於字典中

我發佈了一個類似的討論http://forums.asp.net/t/1926444.aspx/1?given+key+was+not+present+in+the+dictionary但沒有人知道如何幫助我。

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

你能分享'SiteSettings'類的代碼嗎? – achakravarty

+24

-3對新用戶的問題,真的嗎?如果你有衝動的想法,也許你可以解釋他可以做些什麼來改進它,回過頭來看看他是否改進了它,並將它變成+1作爲鼓勵。這就是社區的構建方式。 – AutomatedChaos

+0

Achakravarty,我如何分享該代碼?此評論框對字符數量有限制,這比我需要輸入的代碼少得多。 – muybn

回答

20
當你調用 SiteSettings.GetSettingKeyValuePair()["LA_MembershipProvider_lostPasswordEmailFrom"])如果沒有名爲 LA_MembershipProvider_lostPasswordEmailFrom鍵,你會得到 「給定的鍵不存在在詞典中」錯誤

。你可以做的是檢查鑰匙是否存在,然後獲得價值。你可以做如下

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

謝謝,Damith,上面的代碼似乎已經做到了。你能解釋一下這個區別嗎?我如何給它一個有利的投票? – muybn

+1

@muybn很高興我的回答幫助你。根據您的要求更新詳細信息。 – Damith

相關問題