Uważam, że znaczniki powinny pozostać narzutami, a nie kodem z tyłu.
Doszedłem do sytuacji, w której myślę, że dopuszczalne jest budowanie kodu HTML w kodzie z tyłu. Chciałbym mieć konsensus co do tego, jakie najlepsze praktyki są lub powinny być.
Kiedy dopuszczalne jest budowanie kodu HTML w kodzie z tyłu? Jaka jest najlepsza metoda utworzenia tego HTML? (przykład: Strings, StringBuilder, HTMLWriter itp.)
Odpowiedzi:
Czy używanie czegoś takiego jak Razor nie ma tutaj zastosowania? Ponieważ jeśli generujesz dużo html przy użyciu silnika widoku, możesz to znacznie ułatwić. Został również zbudowany do użytku poza ASP.NET.
Czasami jednak nie jest to potrzebne. Czy rozważałeś użycie klasy TagBuilder, która jest częścią .net (mvc)? Istnieje również HtmlWriter w System.Web.UI (dla formularzy internetowych). Polecam jeden z nich, jeśli robisz
Controls
lubHtml Helpers
.źródło
Chciałbym użyć Html Agility Pack do złożenia HTML, a następnie zapisać go do pliku tekstowego.
Wiele roboczogodzin poświęcono na uczynienie pakietu HTML Agility Pack solidnym i
zgodnym zHTML-em.Myślę, że zawiera nawet przykładową aplikację, która generuje HTML.
Ze strony głównej:
źródło
Użyłbym htmltags do tworzenia HTML.
Przykład:
A potem CSQuery, jeśli chcę parsować HTML
Przykład:
źródło
Istnieją oczywiście biblioteki, takie jak HTML Agility Pack, które mogą pomóc w tych staraniach.
Jeśli naprawdę nie chcesz korzystać z istniejącej biblioteki i chcesz prostego, nieczytelnego kodu, podoba mi się pomysł wyodrębnienia niektórych zachowań, jak podano w poprzedniej odpowiedzi. Podoba mi się również pomysł użycia leżącego u podstaw StringBuilder, w przeciwieństwie do ciągu z kilku powodów:
Gdybym nie potrzebował silnie zaprojektowanego silnika HTML, zbudowałbym prosty, intuicyjny interfejs
źródło
Jeśli ostatecznie użyjesz tylko ciągów znaków, nie zapomnij uciec wszystkich znaków zastrzeżonych HTML w danych wyjściowych.
Zalecam jednak użycie klasy lub biblioteki obsługującej HTML zamiast bezpośredniej pracy z łańcuchami. HTMLWriter wygląda na całkiem dobry początek.
źródło
Prawie dwa lata po opublikowaniu pierwszego postu - oto rozwiązanie, które dobrze mi się sprawdziło. W dokumencie docelowym umieszczam:
wywoływana funkcja wygląda następująco:
Wynik w przeglądarce jest zgodny z oczekiwaniami: Liczba to: 0
Liczba to: 1
Liczba to: 2
Liczba to: 3
Liczba to: 4
Kiedy idę do źródła, znajduję:
źródło
PŁOMIENIE NA!
Prawdopodobnie zostanę za to zlekceważony, ale jako były projektant, który musiał poprawić HTML w kodzie, zanim naprawdę wiedziałem dużo o .NET, powyższy kod był znacznie łatwiejszy do zrozumienia niż metody abstrakcyjnego tworzenia HTML. Jeśli uważasz, że projektant może kiedykolwiek potrzebować poprawić kod HTML, użyj prostych ciągów takich jak ten.
Coś, co widzę, że wielu deweloperów tęskni za pisaniem HTML w kodzie, polega na tym, że w HTML dozwolone są pojedyncze lub podwójne cudzysłowy dla atrybutów. Zamiast więc uciekać od wszystkich cytatów w kodzie (które dla niezainicjowanych wyglądają dziwacznie jak diabli), po prostu użyj pojedynczych cudzysłowów dla cudzysłowów HTML w swoich ciągach.
W PORZĄDKU. Ci wszyscy, którzy cię nienawidzą, łączą cię ze mną. Oto „właściwy” sposób na zrobienie tego bez łączenia łańcuchów, ale podtrzymuję moją opinię, że każda normalna strona z normalnymi tabelami nie przedstawi żadnych problemów z wydajnością poza jakąś śmieszną skalą podobną do Google:
źródło
+=
wewnątrz pętli w ten sposób wcale się nie skaluje; ponieważ ciągi są niezmienne, za każdym razem tworzysz zupełnie nowy ciąg.StringBuilder
Zamiast tego użyj .If you think a designer might ever have to tweak your HTML, use simple strings like this.
trudno jest zrozumieć? Definicja okropnego kodu niektórych ludzi to taka, która kupuje milisekundy wydajności, a jej pełne zrozumienie zajmuje wiele sekund. Oczywiście, gdy spodziewasz się, że Twój kod będzie przeglądany lub utrzymywany przez najniższy wspólny mianownik jednostki, z pewnością można stwierdzić, że pisanie kodu, który jest łatwiejszy do zrozumienia lub poprawienia, jest zawsze lepszy niż najczystszy lub najlepiej działający kod.