Я работаю над приложением, в котором разработчики пошли по ужасному пути, который вы изучаете. Это восходит к тем дням, когда вам приходилось писать собственные библиотеки ISAPI, которые выплевывали HTML-код. Это постоянная головная боль для работы. Если ваш код в основном строковый, значит что-то не так.
Большую часть кода этого типа, который я меняю, я создаю экземпляры серверных объектов, настраиваю их свойства по своему желанию, а затем передаю их .RenderControl (writer). Это значительно облегчает чтение и работу с кодом. Если это приводит к снижению производительности из-за накладных расходов, я готов принять их (на самом деле, после того, как я внес изменения, приложение обычно работает быстрее, так что, как это ни странно, это не так, но я не профилировал) мой код).
Одним простым недостатком жесткого кодирования ваших вещей в строках является изменение стандартов HTML. Код, над которым я работаю, был написан в 04/05 году, и с тех пор
стал
, а html-теги в верхнем регистре больше не кошерны и т. Д. Если они использовали серверные элементы управления, эти серверные элементы управления изменили свои выводит html без необходимости что-либо делать. Это всего лишь один простой пример.
РЕДАКТИРОВАТЬ: Да, и между прочим, BeginRender и EndRender не имеют никакой реализации. Они являются заполнителями, которые вы можете переопределить и предоставить пользовательские функции в классе, производном от HtmlTextWriter.
EDIT2: иногда немного обременительно всегда использовать серверные элементы управления, например, для контейнеров и прочего. Я буду делать много .Controls.Add (), а затем визуализировать контейнер позже. Поэтому иногда я делаю это:
writer.AddAttribute(HtmlTextWriterAttribute.Class, "myContainerClass");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
// do some stuff, .RenderControl on some other controls, etc.
writer.RenderEndTag();
Как уже упоминалось, это отобразит правильный html, даже если html div изменится в будущем, потому что у меня нет жестко закодированных строк.