c# - spec - net core 3 release date
Controles contra HTML estándar (11)
Creo que la mayoría de las respuestas aquí toman el punto de vista de un diseñador. En un proyecto pequeño a mediano, puede parecer una sobrecarga para sincronizar código y CSS / HTML y hacer que sean compatibles con los estándares y limpios. La forma de hacerlo de un diseñador es tener control total sobre el HTML renderizado. Pero hay muchas formas de tener ese control total en ASP.NET. Y para mí, tener el HTML requerido en el archivo aspx / ascx es la forma más difícil y sucia de hacerlo. Si desea aplicar estilo a los controles a través de CSS, siempre puede establecer una clase del servidor a través de la propiedad CssClass. Si desea acceder a ellos a través de JS, puede emitir de nuevo el JS con identificaciones correctas del lado del servidor. La única desventaja que esto proporciona es que un desarrollador y un diseñador tienen que trabajar juntos estrechamente. En cualquier proyecto grande esto es inevitable de todos modos. Pero las ventajas que ofrece ASP.NET superan con creces estas dificultades. Aún así, si desea HTML compatible con estándares, soporte de skinning y otras ventajas para controlar el marcado renderizado, siempre puede usar controles de terceros.
Me estoy metiendo en ASP.NET (C # - Sé que no importa para esta pregunta en particular, pero la revelación completa y todo eso), y si bien me encantan los controles estilo asp:
ahorran un montón de tedioso HTML- elaboración, a menudo me siento frustrado con ciertos comportamientos. Me encontré con una última noche cuando trabajaba con páginas maestras: my <asp:BulletedList ID="nav">
, cuando se convirtió en HTML, se convirtió en <ul id="ct100_nav">
.
Hay otros problemas: noté que al rellenar automáticamente un DataGrid, agrega atributos a la tabla resultante que no necesariamente quiero allí.
Sé que hay una cierta cantidad de "convención sobre la configuración" que debe aceptar cuando confía en un marco para hacerse cargo de algunas de sus tareas tediosas, pero las "convenciones" en estos casos no son tanto convenciones establecidas. , sino más bien extras innecesarios. Sé por qué la ID agrega el prefijo, pero debería poder ajustar y desactivar cosas como esta, sobre todo porque, como un poco evangelizador de estándares web, de todas maneras no duplico las identificaciones de HTML en una sola página.
Entonces, la pregunta aquí es para los desarrolladores de ASP.NET más avezados que yo: en sus experiencias en el desarrollo y despliegue de aplicaciones, ¿cómo aprovechar estos controles? ¿Te encuentras recurriendo a HTML codificado? ¿Usas una mezcla? No quiero diseñar mi HTML alrededor de peculiaridades idiosincrásicas en estos controles, pero, si es posible, me gustaría aprovecharlos cuando sea posible.
¿Qué es un niño para hacer?
El HTML se representa con ese tipo de ID porque es la forma de evitar las colisiones de ID de ASP.NET. Cada control de contenedor, como una página maestra o control de asistente, antepondrá un "ID_" en los ID de sus hijos.
En el caso de su lista de viñetas, ListView proporciona un buen término medio. Todavía puede vincularlo a una fuente de datos, pero le da un control mucho más estricto sobre el HTML procesado. Scott Gu tiene una buena introducción al ListView aquí:
En cuanto a las identificaciones en los controles de servidor: puede encontrar la ID actual que se va a escribir en el navegador accediendo a ClientID. De esta forma, puede combinar secuencias de comandos del lado del servidor y del lado del cliente y aún no tiene que hardcode _id = "ct100_nav" _
Siempre trato de usar los controles incluidos en lugar de "piratear" HTML, porque si hay una actualización o alguna mejora más adelante, todo mi código funcionará simplemente al reemplazar el marco y no tengo que cambiar ningún HTML.
Espero que esto ayude
Personalmente,
Creo que los controles estándar de ASP.NET están bien para las cosas internas: rápido y sucio es bueno en ese escenario. Pero, una vez trabajé con un desarrollador web que también era diseñador y se negó a usar los controles ASP.NET y solo el código en HTML y agregó etiquetas runat = "server" cuando fue necesario. Esto era más porque quería saber exactamente cómo se iba a representar su HTML, y en ese momento, de todos modos, algunos de los controles ASP.NET no se rendirían al cumplimiento de los estándares.
Me siento en algún lugar en el medio: use HTML cuando corresponda y no cuando no. Puedes elegir lo mejor de ambos mundos con los adaptadores de control CSS
Si el prefijo de la ID agregado por ASP.NET es un problema para que pueda acceder a ellos más tarde utilizando JS o algo así ... tiene el lado del servidor de la propiedad .ClientID.
Si la sobrecarga agregada por ASP.NET debe considerar ASP.NET MVC (todavía vista previa) donde tiene control total sobre el html emitido.
Me estoy mudando a MVC porque no me gusta todo lo agregado también ...
Yo también estoy en mi aventura en ASP.NET y también he tenido frustraciones similares. Sin embargo, pronto te acostumbras. Solo tienes que recordar que la razón por la que no tienes la elaboración tediosa de HTML es porque los controles ASP.NET hacen todo por ti .
Hasta cierto punto, puede controlar / modificar estas cosas, incluso si eso significa heredar el control y ajustar el resultado HTML desde allí.
Tuve que hacer eso en el pasado, donde ciertos controles no pasaban la validación del W3C de forma predeterminada al agregar un marcado adicional aquí y allá, así que simplemente lo sobreescribí y edité cuando fue necesario (una solución que literalmente tardó un par de minutos).
Yo diría que aprendan cómo funciona el sistema de controles. Luego, junte unos a otros, esto realmente me ha ayudado a entender qué está sucediendo bajo el capó, así que si alguna vez tengo algún problema, tengo una idea de a dónde ir.
Como Dave Ward ya mencionó, "es la forma de evitar las colisiones de identificación de ASP.NET".
Un muy buen ejemplo de esto es si está intentando poner un control dentro de un control personalizado, luego use ese control personalizado en un repetidor, de modo que el HTML del control personalizado salga varias veces para la página.
Como otros han mencionado, si necesita acceder a los controles para javascript, use la propiedad ClientScript que le dará acceso a ClientScriptManager y registrará sus scripts en la página de esta manera. Asegúrese de escribir las secuencias de comandos para usar la propiedad ClientID en el control al que intenta hacer referencia en lugar de simplemente escribir la ID del control.
En realidad, me alivia ver que algunas opiniones coinciden con las mías: ASP.NET como lenguaje de plantilla es muy pobre.
Me gustaría refutar algunos de los puntos profesionales hechos aquí (¡traje de fuego encendido!):
Dave Ward menciona colisiones de identificación: esto es cierto, pero cuán mal manejado. Hubiera preferido ver los nodos referenciados por xpath o deep css selectores que haciendo que el ID sea efectivamente inútil excepto al aplazar los elementos internos de ASP.NET como clientID; solo hace que escribir CSS y JS sea mucho más difícil sin sentido.
Rob Cooper habla sobre cómo los controles son un reemplazo para HTML, así que todo está bien (parafraseando, perdóname Rob) - bueno, no está bien, porque tomaron un lenguaje existente y bien entendido y dijeron "no, tienes que hacer las cosas a nuestra manera" ahora ", y su camino está muy mal implementado. por ejemplo asp: panel representa una tabla en un navegador y un div en otro! Sin documentación o ejecución, el marcado para un control de inicio de sesión (y muchos otros) no es predecible. ¿Cómo vas a lograr que un diseñador escriba CSS contra eso?
Espo escribe sobre cómo los controles le brindan los beneficios de la abstracción si la plataforma cambia el html; bueno, esto es claramente circular (solo está cambiando porque la plataforma está cambiando, y no lo necesitaría si tuviera allí mi propio código HTML) y en realidad crea un problema. Si el control va a cambiar con las actualizaciones de nuevo, ¿cómo se supone que mi CSS debe hacer frente a eso?
Los apologistas dirán "sí, pero puede cambiar esto en la configuración" o hablarán sobre la anulación de controles y controles personalizados. Bueno, ¿por qué debería hacerlo? El paquete de controles amistosos css destinado a solucionar algunos de estos problemas es cualquier cosa menos su marcado no semántico y no aborda el problema de la identificación.
Es imposible implementar MVC (el concepto abstracto, no la implementación de 3.5) con las aplicaciones de formularios web debido a que estos controles unen la vista y el control. Hay una barrera de entrada para el diseñador web tradicional ahora porque tiene que involucrarse con el código del lado del servidor para implementar lo que solían ser los dominios separados de CSS y JS. Yo simpatizo con estas personas.
Estoy totalmente de acuerdo con el punto de Kiwi de que los controles permiten un desarrollo muy rápido para aplicaciones de cierto perfil, y acepto que, por alguna razón, algunos programadores consideran que HTML es desagradable, y además las ventajas que las otras partes de ASP.NET le brindan, que requiere estos controles, puede valer la pena el precio.
Sin embargo, me molesta la pérdida de control, siento que el modelo de tratar con cosas como clases, estilos y scripting en el código subyacente es un paso equivocado hacia atrás, y además siento que hay mejores modelos para plantillas (implementación de microformatos y xslt para esta plataforma) aunque reemplazar los controles con estos no es trivial.
Creo que ASP.NET podría aprender mucho de la tecnología relacionada en LAMP and rails world, hasta entonces espero trabajar con 3.5 MVC donde pueda.
(Lo siento, fue tan largo </ rant>)
La respuesta corta es que nunca debes usar una versión asp: ... de un control HTML estándar a menos que tengas una buena razón.
Los desarrolladores junior a menudo se dejan engañar por el uso de esos controles porque están cubiertos en la mayoría de los libros ASP.NET, por lo que se supone que deben ser mejores. Ellos no están. En este punto, después de 8 años de desarrollo diario de ASP.NET, solo puedo pensar en 2 o 3 casos en los que realmente tiene sentido usar un asp: ... INPUT controla uno HTML estándar.
Si desea tener tanto control sobre el HTML renderizado, busque ASP.NET MVC en su lugar.
@Brian, ¡Sip! Puedes controlar todo el comportamiento. Considera la posibilidad de crear controles personalizados (hay tres tipos). Recientemente les di una visión general de ellos en mi pregunta aquí .
Recomiendo encarecidamente revisarlos, me ayuda sin fin :)