Frage

Ich beschäftige mich mit ASP.NET (C# – ich weiß, dass es für diese spezielle Frage keine Rolle spielt, aber die vollständige Offenlegung und all das), und obwohl ich das liebe asp:-Style-Steuerelemente ersparen mir viel mühsames HTML-Erstellen, ich bin oft mit bestimmten Verhaltensweisen frustriert.Gestern Abend bin ich bei der Arbeit mit Masterseiten auf eines gestoßen:Mein <asp:BulletedList ID="nav">, wenn es in HTML konvertiert wurde, wurde <ul id="ct100_nav">.

Es gibt noch andere Probleme: Mir ist aufgefallen, dass beim automatischen Ausfüllen eines DataGrid der resultierenden Tabelle Attribute hinzugefügt werden, die ich dort nicht unbedingt haben möchte.

Ich weiß, dass es ein gewisses Maß an „Konventionen über Konfiguration“ gibt, die man akzeptieren muss, wenn man sich auf ein Framework verlässt, um einige seiner mühsamen Aufgaben zu übernehmen, aber die „Konventionen“ sind in diesen Fällen nicht so sehr etablierte Konventionen , sondern eher unnötige Extras.Ich weiß Warum Die ID fügt das Präfix hinzu, aber ich sollte in der Lage sein, solche Dinge zu optimieren und auszuschalten, insbesondere da ich als Verfechter von Webstandards sowieso keine HTML-IDs auf einer einzelnen Seite dupliziere.

Die Frage hier richtet sich also an diejenigen ASP.NET-Entwickler, die erfahrener sind als ich:Wie nutzen Sie diese Kontrollen aufgrund Ihrer Erfahrungen bei der Entwicklung und Bereitstellung von Apps?Greifen Sie auf hartcodiertes HTML zurück?Benutzt du eine Mischung?Ich möchte meinen HTML-Code nicht um eigenwillige Macken in diesen Steuerelementen herum entwerfen, aber wenn möglich, möchte ich sie nach Möglichkeit nutzen.

Was kann ein Junge tun?

War es hilfreich?

Lösung

Persönlich,

Ich denke, dass die Standard-ASP.NET-Steuerelemente für interne Aufgaben gut geeignet sind – Quick and Dirty ist in diesem Szenario gut.Aber ich habe einmal mit einem Webentwickler zusammengearbeitet, der auch Designer war, und er weigerte sich, die ASP.NET-Steuerelemente zu verwenden und nur in HTML zu codieren und bei Bedarf runat="server"-Tags hinzuzufügen.Dies lag eher daran, dass er genau wissen wollte, wie sein HTML gerendert werden sollte, und zu diesem Zeitpunkt wurden einige der ASP.NET-Steuerelemente sowieso nicht entsprechend den Standards gerendert.

Ich sitze irgendwo in der Mitte – verwenden Sie HTML, wo es angebracht ist, und nicht, wenn nicht.Mit dem können Sie das Beste aus beiden Welten genießen CSS-Steuerungsadapter

Andere Tipps

Ich bin eigentlich ziemlich erleichtert, dass hier einige Meinungen mit meiner eigenen übereinstimmen:ASP.NET als Vorlagensprache ist sehr schlecht.

Ich möchte nur ein paar der hier vorgebrachten Argumente widerlegen (Flammenanzug an!):

Dave Ward erwähnt ID-Kollisionen – das stimmt, aber ich weiß, wie schlecht damit umgegangen wird.Ich hätte es vorgezogen, Knoten zu sehen, auf die durch XPath- oder Deep-CSS-Selektoren verwiesen wird, als die ID praktisch unbrauchbar zu machen, außer durch den Rückgriff auf ASP.NET-Interna wie clientID – das macht das Schreiben von CSS und JS nur viel sinnloser.

Rob Cooper spricht darüber, dass die Steuerelemente ein Ersatz für HTML sind, also ist alles in Ordnung (um es zu paraphrasieren, verzeihen Sie mir, Rob) – nun, es ist nicht in Ordnung, weil sie eine bestehende und gut verständliche Sprache genommen und gesagt haben: „Nein, Sie müssen die Dinge auf unsere Weise machen.“ jetzt“, und ihr Weg ist sehr schlecht umgesetzt.z.B.asp:panel rendert eine Tabelle in einem Browser und ein Div in einem anderen!Ohne Dokumentation oder Ausführung ist das Markup für ein Anmeldesteuerelement (und viele andere) nicht vorhersehbar.Wie bringt man einen Designer dazu, dagegen CSS zu schreiben?

Espo schreibt darüber, wie Steuerelemente Ihnen die Vorteile der Abstraktion bieten, wenn die Plattform den HTML-Code ändert – nun, das ist eindeutig zirkulär (es ändert sich nur, weil sich die Plattform ändert, und das wäre nicht nötig, wenn ich stattdessen nur meinen eigenen HTML-Code hätte) und schafft tatsächlich ein Problem.Wenn sich die Steuerung durch Updates erneut ändert, wie soll mein CSS damit umgehen?

Apologeten werden sagen: „Ja, aber Sie können dies in der Konfiguration ändern“ oder über das Überschreiben von Steuerelementen und benutzerdefinierten Steuerelementen sprechen.Nun, warum sollte ich das müssen?Das CSS-freundliche Steuerungspaket, das einige dieser Probleme beheben soll, ist mit seinem unsemantischen Markup alles andere als gut und behebt das ID-Problem nicht.

Es ist unmöglich, MVC (das abstrakte Konzept, nicht die 3.5-Implementierung) sofort mit Webform-Apps zu implementieren, da diese Steuerelemente die Ansicht und die Steuerung so eng miteinander verbinden.Für den traditionellen Webdesigner gibt es jetzt eine Eintrittsbarriere, da er sich mit serverseitigem Code befassen muss, um die früher getrennten Domänen CSS und JS zu implementieren.Ich sympathisiere mit diesen Menschen.

Ich stimme voll und ganz mit Kiwis Standpunkt überein, dass Steuerelemente eine sehr schnelle Entwicklung für Apps mit einem bestimmten Profil ermöglichen, und ich akzeptiere, dass einige Programmierer aus irgendeinem Grund HTML als unangenehm empfinden, und dass Ihnen die Vorteile, die Ihnen die anderen Teile von ASP.NET bieten, weiterhin zustimmen. was diese Kontrollen erfordert, Mai den Preis wert sein.

Jedoch, ICH Ich ärgere mich über den Kontrollverlust, ich halte das Modell für den Umgang mit Dingen wie Klassen, Stilen und Skripten im CodeBehind für einen falschen Rückschritt, und ich bin außerdem der Meinung, dass es bessere Modelle für die Vorlagenerstellung gibt (Implementierung von Mikroformaten und XSLT für diese Plattform). obwohl das Ersetzen von Steuerelementen durch diese nicht trivial ist.

Ich denke, ASP.NET könnte viel von verwandter Technologie in der LAMP- und Rails-Welt lernen, bis dahin hoffe ich, mit 3.5 MVC zu arbeiten, wo ich kann.

(Entschuldigung, das hat so lange gedauert </rant>)

Die kurze Antwort ist, dass Sie niemals einen ASP verwenden sollten: ...Version eines Standard-HTML-Steuerelements verwenden, es sei denn, Sie haben einen wirklich guten Grund.

Nachwuchsentwickler lassen sich oft dazu verleiten, diese Steuerelemente zu verwenden, weil sie in den meisten ASP.NET-Büchern behandelt werden, sodass man davon ausgeht, dass sie besser sein müssen.Sie sind nicht.Zum jetzigen Zeitpunkt, nach 8 Jahren täglicher ASP.NET-Entwicklung, fallen mir nur 2 oder 3 Fälle ein, in denen es tatsächlich Sinn macht, einen ASP zu verwenden: ...INPUT-Kontrolle über eine Standard-HTML-Kontrolle.

Was die IDs auf server-controls betrifft:Sie können die tatsächliche ID finden, die in den Browser geschrieben wird, indem Sie auf ClientID zugreifen.Auf diese Weise können Sie serverseitiges und clientseitiges Scripting kombinieren und müssen trotzdem _id="ct100_nav"_ nicht fest codieren.

Ich versuche immer, die enthaltenen Steuerelemente zu verwenden, anstatt HTML zu „hacken“, denn wenn es später ein Update oder eine Verbesserung gibt, funktioniert mein gesamter Code immer noch, indem ich einfach das Framework austausche, und ich muss kein HTML ändern.

Hoffe das hilft

@Brian, yup!Sie können so ziemlich das gesamte Verhalten kontrollieren.Erwägen Sie die Erstellung benutzerdefinierter Steuerelemente (es gibt drei Arten).Ich habe kürzlich in meiner Frage einen Überblick darüber gegeben Hier.

Ich würde stark Ich empfehle, sie sich anzusehen, es hat mir unendlich weitergeholfen :)

Auch ich bin auf meinem Abenteuer in ASP.NET und habe ähnliche Frustrationen erlebt.Allerdings gewöhnt man sich schnell daran.Sie müssen sich nur daran erinnern, Der Grund dafür, dass Ihnen die mühsame HTML-Erstellung erspart bleibt, liegt darin, dass die ASP.NET-Steuerelemente alles für Sie erledigen.

Bis zu einem gewissen Grad können Sie diese Dinge steuern/optimieren, auch wenn das bedeutet, dass Sie die Kontrolle übernehmen und die HTML-Ausgabe von dort aus optimieren müssen.

Ich musste das in der Vergangenheit tun, als bestimmte Steuerelemente die W3C-Validierung standardmäßig nicht bestanden, indem ich hier und da zusätzliches Markup einfügte, sodass ich es bei Bedarf einfach überschrieben und bearbeitete (eine Korrektur, die im wahrsten Sinne des Wortes nur ein paar Minuten dauerte).

Ich würde sagen, lernen Sie, wie das Steuerungssystem funktioniert.Dann stellen Sie selbst ein paar zusammen. Das hat mir wirklich dabei geholfen, herauszufinden, was unter der Haube vorgeht. Wenn ich also jemals Probleme habe, weiß ich, wohin ich mich wenden kann.

Der HTML-Code wird mit dieser Art von IDs gerendert, da die Methode von ASP.NET ID-Kollisionen verhindert.Jedes Containersteuerelement, beispielsweise eine Masterseite oder ein Assistentensteuerelement, stellt den IDs seiner untergeordneten Elemente ein „ID_“ voran.

Im Fall Ihrer Aufzählungsliste bietet ListView einen guten Mittelweg.Sie können es immer noch an eine Datenquelle binden, aber Sie haben dadurch eine viel genauere Kontrolle über den gerenderten HTML-Code.Scott Gu hat hier eine schöne Einführung in die ListView:

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui. aspx

Wenn das von ASP.NET hinzugefügte Präfix der ID ein Problem darstellt, damit Sie später mit JS oder etwas anderem darauf zugreifen können ...Sie haben die .ClientID-Eigenschaft auf der Serverseite.

Wenn der Overhead durch ASP.NET entsteht, sollten Sie ASP.NET MVC (immer noch Vorschau) in Betracht ziehen, wo Sie die volle Kontrolle über den ausgegebenen HTML-Code haben.

Ich wechsle zu MVC, weil mir all die hinzugefügten Dinge auch nicht gefallen ...

Ich denke, dass die meisten Antworten hier aus der Sicht eines Designers stammen.Bei einem kleinen bis mittleren Projekt könnte es wie ein Aufwand erscheinen, Code und CSS/HTML zu synchronisieren und sie standardkonform und sauber zu machen.Ein Designer kann dies erreichen, indem er die volle Kontrolle über das gerenderte HTML hat.Aber es gibt viele Möglichkeiten, die volle Kontrolle in ASP.NET zu erlangen.Und für mich ist das Vorhandensein des erforderlichen HTML-Codes in der ASPX/ASCX-Datei die am wenigsten skalierbare und schmutzigste Möglichkeit, dies zu tun.Wenn Sie Steuerelemente über CSS formatieren möchten, können Sie jederzeit serverseitig über die CssClass-Eigenschaft eine Klasse festlegen.Wenn Sie über JS darauf zugreifen möchten, können Sie das JS erneut mit den richtigen IDs serverseitig ausgeben.Der einzige Nachteil besteht darin, dass ein Entwickler und ein Designer eng zusammenarbeiten müssen.Bei jedem großen Projekt ist dies ohnehin unvermeidbar.Aber die Vorteile, die ASP.NET bietet, überwiegen diese Schwierigkeiten bei weitem.Wenn Sie jedoch standardkonformes HTML, Skinning-Unterstützung und andere Extras zur Steuerung des gerenderten Markups wünschen, können Sie jederzeit Steuerelemente von Drittanbietern verwenden.

Wie Dave Ward bereits erwähnt hat: „Es ist die Methode von ASP.NET, ID-Kollisionen zu verhindern.“

Ein sehr gutes Beispiel hierfür ist, wenn Sie versuchen, ein Steuerelement in ein benutzerdefiniertes Steuerelement einzufügen und dieses benutzerdefinierte Steuerelement dann in einem Repeater zu verwenden, sodass der HTML-Code des benutzerdefinierten Steuerelements mehrmals für die Seite ausgegeben wird.

Wie bereits erwähnt: Wenn Sie auf die Steuerelemente für Javascript zugreifen müssen, verwenden Sie die ClientScript-Eigenschaft, die Ihnen Zugriff auf einen ClientScriptManager gewährt und Ihre Skripts auf diese Weise auf der Seite registriert.Achten Sie beim Schreiben Ihrer Skripts darauf, die ClientID-Eigenschaft des Steuerelements zu verwenden, auf das Sie verweisen möchten, anstatt nur die ID des Steuerelements einzugeben.

Wenn Sie so viel Kontrolle über den gerenderten HTML-Code haben möchten, schauen Sie sich das an ASP.NET MVC stattdessen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top