Там какие-либо преимущества к использованию HtmlTextWriter, если Вы не собираетесь извлекать выгоду из адаптивного рендеринга?

Если ваш проект имеет ссылки на Roslyn и вы развертываете его на сервере IIS, вы можете получить нежелательные ошибки на веб-сайте, так как многие хостинг-провайдеры все еще не обновили свои серверы и, следовательно, не поддерживают Roslyn.

Чтобы устранить эту проблему, вам необходимо удалить компилятор Roslyn из шаблона проекта. Удаление Roslyn не должно влиять на функциональность вашего кода. Он работал отлично для меня и некоторых других проектов (C # 4.5.2), над которыми я работал.

Выполните следующие действия:

  1. Удалите из следующих пакетов Nuget с помощью командной строки показано ниже (, или вы можете использовать графический интерфейс менеджера пакетов Nuget, нажав правой кнопкой мыши на корневое проектное решение и удалив их ).
    PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    PM> Uninstall-package Microsoft.Net.Compilers
    
  2. Удалите следующий код из вашего файла Web.Config и перезапустите IIS. ( Используйте этот метод, только если шаг 1 не решает вашу проблему. )
    <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
    
15
задан Chris Ballance 21 February 2009 в 20:49
поделиться

4 ответа

Я могу думать о двух причинах использовать HtmlTextWriter:

  1. можно использовать устройство записи для отслеживания отступы, так, чтобы произведенный HTML был отформатирован приятно, вместо того, чтобы появиться на одной строке

  2. , HtmlTextWriter обычно связывается с потоком вывода, таким образом, это должно быть более эффективно, чем создание длинной строки в памяти (в зависимости от того, сколько HTML Вы генерируете).

Ни один из них не является экстраординарными причинами, но их достаточно, чтобы убедить меня использовать устройство записи, когда эффективность необходима, или если я пишу основное управление, которое будет снова использовано и должно быть максимально профессиональным. Ваш пробег может варьироваться :-).

11
ответ дан 1 December 2019 в 01:53
поделиться

HtmlTextWriter выгоден потому что:

HtmlTextWriter является самым чистым, и разметка приятно располагается с отступом, когда он представляется.

существует влияние производительности, как HtmlTextWriter пишет непосредственно в поток вывода. Stringbuilder не пишет в поток вывода, пока ToString не называют на нем.

существует пример на том, почему Вы использовали бы HtmlTextWriter для Сохранение и Многократное использование вывода HTML здесь также.

6
ответ дан 1 December 2019 в 01:53
поделиться

Другое преимущество могло состоять в том, что использование HtmlTextWriter можно было форматировать код в инструменте для очистки (больше дружественного обслуживания) путь, и что поддержки HtmlTextWriter, кодирующие HTML автоматически. Сравните:

writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId");
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass);
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red");
writer.RenderBeginTag(HtmlTextWriterTag.Span);
writer.WriteEncodedText(text);
writer.RenderEndTag();

по сравнению с:

StringBuilder html = new StringBuilder();
html.Append("<span");
html.Append(" id=\"someId\"");
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass));
html.Append(">");
html.Append(HttpUtility.HtmlEncode(text));
html.Append("</span>");

Можно утверждать, что код во втором примере может быть написан в другом, возможно более чистом, путь, но это могло рассматриваться как преимущество HtmlTextWriter, потому что это в основном осуществляет один канонический способ отформатировать (который снова улучшает обслуживание).

Править: На самом деле я на самом деле сделал ошибку во втором отрывке, и я должен был возвратиться и зафиксировать ответ. Это подтверждает мнение, которое я хотел высказать.

12
ответ дан 1 December 2019 в 01:53
поделиться

В какой-то момент все еще необходимо передать это HtmlTextWriter для рендеринга клиенту. Я предполагаю, что у Вас было бы заключительное устройство записи. Запишите (сурьма. ToString ()); там во втором примере. То, что можно сделать для сокращения строк кода, пишет необработанный HTML, точно тот же путь как во втором примере StringBuilder, но использует HtmlTextWriter. Запишите вместо этого.

writer.Write("<table><tr><td>");
writer.Write(someTextVariable);
writer.Write("</td></tr></table>");

Затем использование StringBuilder кажется ненужным. И, HtmlTextWriter, по крайней мере в некоторой степени, удостоверится, что сгенерированный HTML совместим (хотя это не верно в вышеупомянутом случае при записи необработанного HTML).

2
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: