ASP.net c # заменить строку не работает - PullRequest
1 голос
/ 04 октября 2010
        // 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);

Кажется, все работает нормально, за исключением того, что тело все еще отображается с [CONFIRMATION_LINK] в тексте, есть идеи?

Ответы [ 4 ]

9 голосов
/ 04 октября 2010

Строки неизменны. Строковая операция обычно возвращает новые строковые экземпляры. Попробуйте это:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);
2 голосов
/ 04 октября 2010

Строки в C # являются неизменяемыми, то есть они не могут быть изменены после создания экземпляра, если они явно не указывают на другую строку. В результате вы вызываете «Заменить» без какой-либо переменной, чтобы получить возвращаемую строку.

Поменяйте 2-ю на последнюю строку с этим кодом:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);
2 голосов
/ 04 октября 2010

Метод Replace возвращает новую обновленную строку. Вам необходимо присвоить результаты обратного вызова Replace на emailBody:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);
1 голос
/ 04 октября 2010

Это потому, что Replace не редактирует переменную emailBody. Возвращает результирующую строку. В этом случае вам понадобится:

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