Wenn ich meine Steuerelemente in ASP.net erzeuge, kommen sie so heraus:
%Vor%Ziemlich hässlich und schwer zu verstehen, wenn Sie die Quelle anzeigen. Dies ist normalerweise kein Problem, aber meine Site bietet Besuchern Ressourcen und Tutorials, wobei das Betrachten der Quelle Teil der Erfahrung ist.
Gibt es eine Möglichkeit, diese Steuerelemente schön darzustellen? Eingerückt, bessere IDs und Namen usw.?
In .NET 4.0 können Sie den ClientIDMode auf eine der vier Optionen AutoID, Statisch, Vorhersehbar und Inherit festlegen. Wahrscheinlich suchen Sie nach "Statisch", um sicherzustellen, dass Ihre Steuerelemente auf der Seite mit den IDs gerendert werden, die Sie ihnen zugewiesen haben.
Sie können es auf Anwendungsebene festlegen, indem Sie hinzufügen:
%Vor%Zu Ihrer web.config
Es gibt weitere Details zu diesen Änderungen hier: Ссылка
ASP.NET WebForms HTML-Rendering und -Steuermarkierung wurden in .NET 4.0 verbessert und dies hilft bei den Kontroll-IDs und der Struktur der HTML-Elemente selbst (wie in Rob Stones Antwort auf Ihre Frage). Die Einrückungen und Zeilenumbrüche sind jedoch möglicherweise immer noch weniger als wünschenswert.
Wenn die HTML-Quelle wirklich Teil der Benutzererfahrung für Ihre Anwendung ist, können Sie das Schreiben eines HttpModule an die ReleaseRequestState -Ereignis. Dieser Ansatz behandelt die tatsächlichen Zeilenumbrüche und Einrückungen Ihrer HTML-Quelle. Um das Rad nicht neu zu erfinden könntest du entweder das NET-Port von HTML Tidy oder ein .NET Wrapper für HTML Tidy als Teil Ihres benutzerdefinierten Filters auf die Antwort.
Es gibt ein schönes Beispiel dafür, wie Sie einen benutzerdefinierten Filter in einem HttpModule in diesem Blog . Der Abschnitt des Codes, den ich am nützlichsten fand, ist wie folgt (leicht bearbeitet, aber Sie können das vollständige Verständnis aus dem Blog selbst erhalten):
%Vor%und in Ihrer CustomFilter-Klasse ...
%Vor%Die Ausgabe von pretty wird fast unmöglich sein, weil der Parser beim Rendern von Steuerelementen kein Konzept von Kontext hat. Viele Steuerelemente rendern mehr als ein HTML-Element, und sie müssten dazu ihren Kontext kennen ... und wissen, welche Art von Formatierung gewünscht ist (z. B. für Listensteuerelemente, wann eine neue Zeile beginnen soll, wann erneut einrücken).
Außerdem werden nicht alle Elemente im Markup tatsächlich gerendert, und das Layout Ihres Markups hängt nicht immer direkt mit dem Layout der Ausgabe zusammen. Zum Beispiel:
%Vor% Placeholder
wird nicht gerendert, würde das also einen Einzug in der Ausgabe verursachen oder nicht? DropDownList
rendert mehrere HTML-Steuerelemente, und es gibt keine Möglichkeit, die gewünschte Art der Wiedergabe zu bestimmen: Soll es auf dieselbe Ebene eingerückt werden wie das erste Steuerelement? Sollte es ohne Inter-Element-Abstand rendern? Aus praktischer Sicht ist es effizienter, ohne Abstand zu rendern (was die meisten Steuerelemente tun), um die Menge an Daten zu minimieren, die an den Client gesendet werden muss.
Schlussendlich, selbst in den einfachen Fällen, wird die tatsächliche Darstellung, wenn Sie "Quelle anzeigen" von einem Browser sehen, wahrscheinlich zwischen Browsern unterschiedlich sein. Sie können alle mit Leerzeichen, Zeilenumbrüchen und Einrückungen beliebig umgehen, da sich der Abstand zwischen den Elementen nicht auf das Rendering auswirkt.
Wenn Sie "Vorher / Nachher" -Beispiele auf Ihrer Website zeigen, haben Sie wirklich nicht viel Auswahl, außer die Ausgabe für die Präsentation manuell zu formatieren, wenn dies das ist, was Sie wollen. Wenn die Leute auch die Quelle sehen wollen, ist das in Ordnung, aber es wäre sehr schwierig, die Quelle so gut wie Ihr Markup aussehen zu lassen.
Wenn das für Sie wirklich wichtig war, könnten Sie den Ausgabestream abfangen und neu formatieren, bevor Sie ihn an den Client senden, aber er wird nicht direkt aus der Rendering-Engine von asp.net kommen. Für ein Beispiel, wie dies zu tun ist, google "asp.net Antwortfilter" - Hier ist einer. Ich bin mir sicher, dass es nicht schwer ist, Code zu finden, der HTML formatiert, den Sie auf dieses Konzept anwenden könnten.
Spät zur Party hier, aber ich stand vor einem ähnlichen Problem. Wir erzeugten ein hochkomplexes Javascript, das viel zu kaputt wurde, um es vernünftig zu debuggen. Alles war im Einklang mit dem Rest des Markups. Also kam ich mit dieser Klasse.
%Vor%Anwendungsbeispiel:
%Vor%Erzeugt Markup:
%Vor% Wir verwenden eine ähnliche Überschreibung der Render-Methode für die Steuerelemente, die keine einfachen HTML-Tags sind (in einer anderen Basisklasse / Vererbungskette). Der einzige Nachteil ist, dass die writer
, die an die Render
-Methode übergeben wurde, nicht über die aktuelle Einrückungsstufe eines Ascx informiert ist, auf dem Ihr Steuerelement lebt (falls vorhanden). Während die Hierarchie des Steuerelements und seiner untergeordneten Elemente eingerückt und aufgebrochen ist, werden sie auf eine Einrückungsstufe von 0 zurückgesetzt, wodurch der Gesamtfluss von Surround-Markup in Ihren ASCX- oder ASPX-Layoutdateien unterbrochen wird.