Данный ключ отсутствовал в словаре

Я унаследовал проект, который дает пользователям вышеуказанную ошибку при попытке получить потерянный пароль в проекте .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"];
    }
}

Ответы

Ответ 1

когда вы вызываете 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"];
    }
}