Domanda

        // 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);

Tutto sembra funzionare bene, tranne il corpo è ancora mostrando con [CONFIRMATION_LINK] nel testo, tutte le idee?

È stato utile?

Soluzione

Le stringhe sono immutabili. operazione String generalmente tornare nuove istanze della stringa. Prova questo:

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

Altri suggerimenti

Il Replace metodo restituisce un nuova corda aggiornato. È necessario assegnare i risultati della chiamata Replace torna a emailBody:

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

Stringhe in C # sono immutabili, nel senso che non possono essere modificati una volta che sono istanziati se non espressamente indicato un'altra stringa. Quello che succede è che si sta chiamando "sostituire" senza alcuna variabile per ricevere la stringa che restituisce.

Cambia il secondo all'ultima riga con questo codice:

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

E 'perché Sostituire non modificare la variabile emailBody. Esso restituisce la stringa risultante. In questo caso, avreste bisogno di:

string bodyToSend = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);
emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, bodyToSend);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top