2010-10-04 11 views
1
 // Build email link 
     confirmLink = Master.siteDomain + "/newsLetter.aspx?action=confirm&e=" + emailAddress + "&code=" + verCode; 

     using (SqlCommand cmd = new SqlCommand("SELECT newRegEmailBody, newRegEmailSubj FROM tblSiteSettings WHERE (isActive = 1)", Master.cn)) 
     { 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      if (rdr.Read()) 
      { 
       emailBody = rdr[0].ToString(); 
       emailSubj = rdr[1].ToString(); 
      } 
      rdr.Close(); 
     } 
     emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); 
     emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, emailBody); 

Tout semble fonctionner très bien, à l'exception du corps montre toujours avec [CONFIRMATION_LINK] dans le texte, des idées?ASP.net C# chaîne de remplacement ne fonctionne pas

Répondre

9

Les chaînes sont immuables. L'opération de chaîne renvoie généralement de nouvelles instances de chaîne. Essayez ceci:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); 
+0

Un tel oubli simple ... Merci pour la pensée claire. – James

2

La méthode Replace retourne une nouvelle chaîne mise à jour. Vous devez affecter les résultats de l'appel vers ReplaceemailBody:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); 
2

Cordes en C# sont immuables, ce qui signifie qu'ils ne peuvent pas être modifiés une fois qu'ils sont instanciés moins explicitement indiqué à une autre chaîne. Ce qui se passe, c'est que vous appelez "Replace" sans aucune variable pour recevoir la chaîne qui retourne.

Modifier la 2e à la dernière ligne avec ce code:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); 
1

Il est parce que Remplacer ne modifie pas la variable emailBody. Il renvoie la chaîne résultante. Dans ce cas, vous auriez besoin:

string bodyToSend = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); 
emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, bodyToSend);