In. Net (и многие другие наборы инструментов) ожидаются неизменяемыми. Это означает, что после того, как вы сделали:
string foo = "bar";
, вы всегда найдете «bar», если осмотрите var foo
. Если вы хотите, чтобы foo
было чем-то другим, вам нужно присвоить ему новое значение:
string foo = "fubar";
string huh = foo.Replace("fu", "foo");
Тот же принцип применяется к методам, которые вы вызываете для строк, например Replace
. Этот метод возвращает новую строку, в которой ваш исходный код заменен новыми значениями. Таким образом, в приведенном выше примере huh
будет иметь значение "foobar", где foo
будет по-прежнему "fubar".
Для этой строки:
File.ReadAllText(ConfigurationManager.AppSettings["Body_Success"]).Replace("$Title$", ConfigTitle);
, которую вы отбрасываете замененные результаты на полу.
Вместо этого сделайте следующее:
// read the template from the file once and put it in a variable
email_body_success = File.ReadAllText(ConfigurationManager.AppSettings["Body_Success"]);
// replace the title by storing the replaced value again the same variable
email_body_success = email_body_success.Replace("$Title$", ConfigTitle);
С этого момента, email_body_success
будет иметь строку с (частично) замененным шаблоном. Вам не нужно (и это неправильно) снова вызывать File.ReadAlltext
. Потому что если вы это сделаете, вы снова прочитаете шаблон из файла, выбросив то, что уже было заменено.
Теперь мы переходим к двум циклам для столбцов и строк. После того, как вы собрали все необходимое, содержимое html
необходимо заменить маркером в email_body_success
.
Вместо:
File.ReadAllText(ConfigurationManager.AppSettings["Body_Success"]).Replace("$Columns$", html);
do
// replace the columns
email_body_success = email_body_success.Replace("$Columns$", html);
html = String.Empty; // html is stored, let's reset for its next use.
, потому что теперь email_body_success
будет иметь наш предыдущий частично замененный шаблон с нашим новым html для $ Columns $. В начале ваших строк l oop вы хотите сбросить строку html
, чтобы она снова опустела, чтобы столбцы не удерживались
В конце строк l oop то же самое исправить нужно применить. Замените
email_body_success = File.ReadAllText(ConfigurationManager.AppSettings["Body_Success"]).Replace("$Rows$", html);
на
// replace the rows
email_body_success = email_body_success.Replace("$Rows$", html);
Это должно дать вам email_body_success
шаблон с его замененными частями.
Я не уверен, чего вы хотели достичь с этой строкой:
writehtmlFile.WriteLine(html);
, но если вы хотели записать весь шаблон в этот файл, вам нужно заменить html
на переменную email_body_success
и переместить эти строки после последней замены.