Замена специального тега в шаблоне (файле) html в произвольном неупорядоченном списке не работает - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь динамически построить тело письма на основе шаблона 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
  • Пароль: ваш_пароль

Если у вас возникли проблемы, не стесняйтесь обращаться к нам.

С уважением

...