用数据库中的值替换字符串中的代码

本文关键字:字符串 代码 替换 数据库 | 更新日期: 2023-09-27 17:50:22

我正在努力替换字符串中的一些代码。我有一个函数,从emailtemplates表中获得一个电子邮件模板,其中包含一些代码,如##NewUserFirstName####password##在表格的主体栏中。还有另一个表,它定义了哪个表的值将取代这些代码,所以对于##NewUserFirstName##,我定义了UserProfile.FirstName,对于##password##,我在第二个表中定义了UserProfile.password。我有这样的所有合并代码:

  using (IMailMergeCodeManager mailMergeCodeManager = new ManagerFactory().GetMailMergeCodeManager())
    {
        mailMergeCodes = mailMergeCodeManager.GetAll().ToList();
    }

现在我将模板中的代码替换为如下代码:

 using (ICampaignManager campaignManager = new ManagerFactory().GetCampaignManager())
 {
     using (IUserProfileManager UserProfileManager1 = new ManagerFactory().GetUserProfileManager())
     {
         using (IAccountManager AccountManager = new ManagerFactory().GetAccountManager())
         {
             using (ICallTypeManager CallTypeManager = new ManagerFactory().GetCallTypeManager())
             {
                 using (ICallOutcomeManager CallOutComeManager = new ManagerFactory().GetCallOutcomeManager())
                 {
                     using (ICallRecordingManager CallRecordingManager = new ManagerFactory().GetCallRecordingManager())
                     {
                         UserProfile UserProfile = UserProfileManager1.GetByfkAccountId(Convert.ToInt32(AccountId)).FirstOrDefault();
                         Account acc = AccountManager.GetById(Convert.ToInt32(AccountId));                                      
                         UserProfile CurrentLoggedInUser = UserProfileManager1.GetByfkAccountId(Convert.ToInt32(CurrentAccount.Id)).FirstOrDefault();
                         CallRecording callRecording = CallRecordingManager.GetById(callRecordingId);
                         if (subject.Contains("##password##") || body.Contains("##password##"))
                             password = GetPassword(UserProfile.UserAuthentication.EmailAddress);

                         foreach (MailMergeCode mergeCode in mailMergeCodes)
                         {
                             if (body.Contains(mergeCode.MailMerge)) 
                                 body = Regex.Replace(body, mergeCode.MailMerge, mergeCode.FieldName, RegexOptions.IgnoreCase);

                             if (subject.Contains(mergeCode.MailMerge) && !subject.Contains("##password##"))
                                 subject = Regex.Replace(subject, mergeCode.MailMerge, mergeCode.FieldName, RegexOptions.IgnoreCase);
                         }
                     }
                 }
             }
         }
     }
 }

}

但下一行使##NewUserFirstName##成为UserProfile.FirstName

body = Regex.Replace(body, mergeCode.MailMerge, mergeCode.FieldName, RegexOptions.IgnoreCase);

而不是从UserProfile.FirstName中获取值,该值为"Joe Smith"

如何解决这个问题?

用数据库中的值替换字符串中的代码

使用此代码有任何问题请告诉我

if (Body.Contains(""##password##""))
 {
 Body = Body.Replace(""##password##"", yourpassword_string);
 }