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