14

.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"];
    }
}
4

1 に答える 1

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"];
    }
}
于 2013-08-27T06:05:10.170 に答える