Я пытаюсь динамически построить тело письма на основе шаблона html (файл html). Этот шаблон содержит специальные теги, заключенные между символами '[[' и ']]', которые я хочу заменить на C#. Например, предположим следующий шаблон Html:
Уважаемый, мистер / миссис [[Имя]] Мы рады сообщить вам, что мы зарегистрировали вас на нашей онлайн-платформе. Ниже приведены ваши учетные данные для доступа к:
[[учетные данные]]
Если у вас есть какие-либо проблемы, не стесняйтесь обращаться к нам.
С уважением
В этом шаблоне есть два тега:
- [[Имя]], которые будут заменены именем человека
- [[учетные данные]], который будет заменен на неупорядоченный html список
Сначала из C# я прочитал шаблон (файл) html, выполнив следующую команду:
string htmlBody = System.IO.File.ReadAllText(txtPath);
Как вы можете видеть, я прочитать весь файл html в строковую переменную.
Затем я заменяю специальные теги на соответствующие значения, используя следующую команду:
htmlBody = htmlBody.Replace("[[Name]]", personNameValue);
htmlBody = htmlBody.Replace("[[credentials]]", unorderedlistValue);
Замена для [[Name]] выполнена правильно за работой. В Visual Studio IDE в режиме отладки, если я проверяю содержимое htmlBody с помощью представления HTML, я вижу, что оно правильно заменено.
Однако для случая [[credentials]] это не работает. После замены я проверяю содержимое htmlBody, используя представление HTML, и вижу, что тег [[credentials]] не был заменен значением соответствующего кода (неупорядоченный список).
Переменная unorderedlistValue - это строка, которую я создаю с использованием html теги ul и li. С C# я строю этот неупорядоченный список в строку из DataTable (каждая строка имеет два столбца, fieldName и fieldValue), как показано ниже:
string unorderedHtmlList = "<ul style=\"margin-left: 40px; padding-left: 0\">";
foreach (System.Data.DataRow row in myDataTable.Rows)
{
string fieldName = row["fieldName"].ToString();
string fieldValue = row["fieldValue"].ToString();
unorderedHtmlList += string.Format("<li>{0} {1}</li>", fieldName, fieldValue);
}
unorderedHtmlList += "</ul>";
htmlBody = htmlBody.Replace("[[credentials]]", unorderedHtmlList);
В Visual Studio я отлаживаю его и вижу окончательный вариант значение для unorderedHtmlList в HTML представлении, как показано ниже:
- Пользователь: your_username
- Пароль: your_password
и в представлении XML, как показано ниже :
<ul style="margin-left: 40px; padding-left: 0">
<li>User: your_username</li>
<li>Password: your_password</li>
</ul>
Но как только приведенный выше код выполняется, я вижу, что тег [[credentials]] не был заменен неупорядоченным списком. Так что же я делаю не так?
Желаемый результат после замены всех тегов будет, например:
Уважаемый, мистер / миссис Дженнифер Мы рады сообщить вам, что мы зарегистрировали вас на нашей онлайн-платформе. Ниже приведены ваши учетные данные для доступа к:
- Пользователь: your_username
- Пароль: ваш_пароль
Если у вас возникли проблемы, не стесняйтесь обращаться к нам.
С уважением