Получение симпатичного вывода будет почти невозможным, потому что синтаксический анализатор не имеет никакого понятия контекста при рендеринге элементов управления. Многие элементы управления отображают более одного HTML-элемента, и для этого им необходимо знать их контекст ... а также знать, какой тип форматирования требуется (например, для элементов управления списком, когда начинать новую строку, когда сделать отступ снова).
Кроме того, не все элементы в разметке фактически визуализируются, и компоновка вашей разметки не всегда напрямую связана с компоновкой выходных данных. Например:
<asp:PlaceHolder runat="server" />
<asp:Panel runat="server" />
<asp:DropDownList runat="server" />
</asp:Panel />
</asp:PlaceHolder />
Placeholder
не отображается, поэтому может ли это вызвать отступ в выводе или нет? DropDownList
отображает несколько элементов управления HTML, и у него нет возможности определить желаемый способ визуализации: должен ли он иметь отступ на том же уровне, что и первый элемент управления? Должен ли он отображаться без интервала между элементами? С практической точки зрения более эффективно выполнять рендеринг без пробелов вообще (что и делают большинство элементов управления), чтобы минимизировать объем данных, которые необходимо отправить клиенту.
Наконец, даже в простых случаях фактическое представление, когда вы «просматриваете источник» из браузера, вероятно, будет отличаться в разных браузерах. Все они могут по своему выбору обрабатывать интервалы, разрывы строк, отступы, поскольку межэлементный интервал никак не влияет на рендеринг.
Если вы показываете примеры «до / после» на своем веб-сайте, у вас действительно нет особого выбора, кроме как вручную отформатировать вывод для презентации, если это то, что вам нужно. Если люди тоже хотят посмотреть на источник, это нормально, но было бы очень сложно сделать так, чтобы источник выглядел так же хорошо, как ваша разметка.
Если это действительно важно для вас, вы можете перехватить поток вывода и переформатировать его перед отправкой клиенту, но это не произойдет напрямую из движка рендеринга asp.net. В качестве примера того, как это сделать, воспользуйтесь "фильтром ответов asp.net" - , вот один из них. Я уверен, что нетрудно найти код, форматирующий HTML, который можно применить к этой концепции.