Написание тега ‹meta› с помощью HTMLTextWriter в проблеме C#

Я пытаюсь отобразить базовую веб-страницу HTML, используя C# и HTMLTextWriter для вывода в объект WebBrower, но у меня возникают проблемы с отображением тега <meta> в моем выводе HTML.

Что я ожидаю на выходе...

<!DOCTYPE html>
<html>

  <head>
    <meta charset="UTF-8">
    <title>My Website</title>
  </head>

  <body>
    <h1>Hello World!</h1>
  </body>

</html> 

Что сейчас выводится...

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    </meta charset="UTF-8"><title>
      My Website
    </title>
    </head><body>
    <h1>
      Hello World!
    </h1>
  </body>
</html>

Обратите внимание, что тег <meta> выводится как <meta charset="UTF-8"> и </meta charset="UTF-8">, а не просто <meta charset="UTF-8">.

Что я могу сделать, чтобы решить эту проблему?

Вот код, который я использую..

var sw = new StringWriter();
using (var writer = new HtmlTextWriter(sw)) {
    writer.RenderBeginTag("!DOCTYPE html");
    writer.RenderBeginTag(HtmlTextWriterTag.Html);
        writer.RenderBeginTag(HtmlTextWriterTag.Head);
            writer.RenderBeginTag("meta charset=\"UTF-8\"");
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Title);
                writer.Write("SIT323 - My Website");
            writer.RenderEndTag();
        writer.RenderEndTag();
        writer.RenderBeginTag(HtmlTextWriterTag.Body);
            writer.RenderBeginTag(HtmlTextWriterTag.H1);
                writer.Write("Hello World!");
            writer.RenderEndTag();
        writer.RenderEndTag();
    writer.RenderEndTag();
};
return sw.ToString();

person TheAuzzieJesus    schedule 24.07.2016    source источник


Ответы (1)


Попытайся:

writer.AddAttribute("charset", "UTF-8");
writer.RenderBeginTag(HtmlTextWriterTag.Meta);
// Other needed methods...
writer.RenderEndTag();

Результат:

<meta charset="UTF-8">

Шаблон кодирования для отображения элементов разметки выглядит следующим образом:

  1. Используйте метод AddAttribute, чтобы добавить любые атрибуты к элементу.

  2. Используйте метод RenderBeginTag.

  3. При необходимости используйте другие методы для отображения содержимого, находящегося между открывающим и закрывающим тегами элемента.

  4. Используйте метод RenderEndTag.

person RAM    schedule 24.07.2016
comment
Идеально! Спасибо. - person TheAuzzieJesus; 24.07.2016
comment
@TheAuzzieJesus, пожалуйста, еще раз посмотрите на код ответа. Обратите внимание, что вы должны использовать RenderEndTag() после RenderBeginTag(...). Другими словами, вы должны, наконец, использовать RenderEndTag() после каждого RenderBeginTag(...). Хотя вы можете иметь другие методы по мере необходимости между ними. - person RAM; 24.07.2016
comment
Спасибо, к счастью, мне удалось выяснить это методом проб и ошибок. - person TheAuzzieJesus; 24.07.2016
comment
@RAM, ты действительно пробовал свой пример? для меня это дает мне ‹meta charset=utf-8 /› (самозакрывающийся), тогда как мета не нуждается в /›, это должно быть просто закрытие › - person joedotnot; 26.09.2020
comment
@joedotnot, метатег с самозакрытием поддерживается всеми браузерами, но вы можете использовать вместо него writer.RenderBeginTag(@"meta charset=""utf-8""");. - person RAM; 27.09.2020