Categories
ASP.NET

CSS Friendly ASP.NET 2.0 Control Adapters

Como ya había comentando en un post anterior, hacer que el motor de ASP.NET 1.x genere código (X)HTML relativamente correcto para todos los navegadores, es una tarea bastante trabajosa, porque los controles estándar no generan código muy limpio que digamos, esto empeora si usas controles de terceros -sin código fuente- que sólo funcionan bien en Internet Explorer, si bien es cierto que estos problemas se mitigan con algúnas técnicas (configurando algunas cosas en el web.config, escribiendo tus propios controles e inclusive usando módulos http para corregir el HTML generado), es un poco frustrante, cuando existen casos en los que no puedes hacer nada!

Felizmente, muchos de estos problemas han sido solucionados en ASP.NET 2, aunque todavía hay varios controles estándar y de terceros que generan código semánticamente incorrecto (Ejm Menu, FormView, DetailsView, etc), ahora existe la posibilidad de modificar la salida de estos controles sin necesidad de tener el código fuente.

El título del post hace referencia a un proyecto que muestra la forma de implementar los denominados Control Adapters, característica que comenté en el párrafo anterior. La beta 1 de este proyecto fue publicada en Abril de 2006, este mes se ha publicado la Beta 2 con bastantes mejoras y correcciones de fallas, además de traer ejemplos nuevos ejemplos para controles como GridView, Login, CreateUserWizard, etc.

Sin duda, ahora los desarrolladores que trabajen con asp.net, tienen más facilidad para producir páginas con XHTML correcto y válido... aunque también hay que reconocer, que a muchos no les importan este tipo de cosas!

Categories
ASP.NET

ViewState

Dave Reed explica en un extenso artículo, los errores que normalmente se cometen al hacer uso del ViewState, las consecuencias de estos errores y las posibles soluciones para éstas.

MISUNDERSTANDING OF VIEWSTATE WILL LEAD TO...

  • Leaking sensitive data
  • ViewState Attacks - aka the Jedi Mind Trick -- *waves hand* that plasma tv is for sale for $1.00
  • Poor performance - even to the point of NO PERFORMANCE
  • Poor scalability - how many users can you handle if each is posting 50k of data every request?
  • Overall poor design
  • Headache, nausea, dizziness, and irreversible frilling of the eyebrows.

WHAT DOES VIEWSTATE DO?

  • Stores values per control by key name, like a Hashtable
  • Tracks changes to a ViewState value's initial state
  • Serializes and Deserializes saved data into a hidden form field on the client
  • Automatically restores ViewState data on postbacks

WHAT DOESN'T VIEWSTATE DO?

  • Automatically retain state of class variables (private, protected, or public)
  • Remember any state information across page loads (only postbacks) (that is unless you customize how the data is persisted)
  • Remove the need to repopulate data on every request
  • ViewState is not responsible for the population of values that are posted such as by TextBox controls (although it does play an important role)
  • Make you coffee

Sin duda una excelente referencia para los que desarrollan aplicaciones con ASP.NET.

Categories
.NET ASP.NET

Problemas validando el código que genera ASP.NET?

Cuando se procesa una página, ASP.NET examina la información de la solicitud sobre el explorador actual y basándose en el tipo de explorador (cadena de agente de usuario), representa el marcado que es apropiado para dicho explorador.

En versiones anteriores a ASP.NET 2.0, el código HTML generado por defecto era HTML 3.2, ya que se consideraba a Internet Explorer como el único "navegador moderno" (irónico no? :-P), según este artículo de MSDN Magazine, en ASP.NET 1.x las características del navegador se toman de %windir%\System32\inetsrv\browscap.ini (se dá mayor importancia a IE, aunque existen definiciones de versiones muy antiguas de otros navegadores) y de la sección browserCaps del Web.config, para finalmente crear una instancia de la clase HttpBrowserCapabilities, accesible desde el request actual.

Felizmente, en ASP.NET 2, muchas cosas se han corregido en este aspecto, ya que por defecto se incluyen una serie de archivos xml con extensión .browser, donde se especifica el nivel de compatibilidad de distintos navegadores (pueden revisar %windir\Microsoft.NET\Framework\v2.0.50727\Config\Browsers). Por otro lado, también ofrece la posibilidad de modificar la salida de cualquier control (pueden ver un demo en http://asp.net/CSSAdapters/Default.aspx).

Con la breve introducción expuesta, el motivo de la entrada es para comentar que si quieren validar sus páginas hechas en ASP.NET 2, necesitan especificarlo en un archivo, de modo que el navegador del validador sea tratado como uno moderno.

Si envía una página Web ASP.NET a un servicio de validación como, por ejemplo, W3C Markup Validation Service, ASP.NET podría representar una versión de la página que no sea compatible con los estándares de XHTML. Esto es porque el servicio de validación no se presenta como un tipo de explorador que ASP.NET reconozca como, por ejemplo, Internet Explorer o Mozilla. Cuando ASP.NET no puede reconocer el tipo de explorador, toma como valor predeterminado la representación de marcado a bajo nivel, la cual no incluye elementos y atributos compatibles con XHTML, o características como estilos de hojas de estilo en cascada.

Esto es lo que se tiene que incluir en el directorio especial App_Browsers de una aplicación web:

xml:

<browsers>
  <browser id="W3C_Validator" parentID="default">

    <identification>
        <userAgent match="^W3C_Validator" />
    </identification>
    <capabilities>
      <capability name="browser"              value="W3C Validator" />

      <capability name="ecmaScriptVersion"    value="1.2" />
      <capability name="javascript"           value="true" />

      <capability name="supportsCss"          value="true" />
      <capability name="tables"               value="true" />

      <capability name="tagWriter"
         value="System.Web.UI.HtmlTextWriter" />

      <capability name="w3cdomversion"        value="1.0" />

    </capabilities>
  </browser>
</browsers>

Como se menciona en la documentación, aunque ASP.NET genere un marcado compatible con XHTML, algunos controles admiten una funcionalidad opcional que, si se utiliza, podría generar un marcado no compatible.

Espero que esta entrada sirva para los desarrolladores interesados en hacer que sus sitios intenten cumplir con los estándares definidos por la W3C

Categories
.NET ASP.NET CSS

Controles Personalizados en ASP.NET – Parte 2

En la entrada anterior, vimos como extender el control TextBox (del .NET Framework) para restringir la entrada a sólo ciertos caracteres definidos en una expresión regular. Pues bien, en esta ocasión vamos a crear un control que ayudará a medir la popularidad de algún artículo o comentario.

Para la apariencia del control, tomé como base "CSS Star Rating", el cuál incluye una hoja de estilos y una imagen. Como ya había comentado en la entrada anterior, para hacer uso de estos elementos es necesario registrarlos y compilarlos, a continuación se muestra la forma de hacerlo:

Categories
.NET Artí­culos ASP.NET

Controles Personalizados en ASP.NET

En esta oportunidad quiero mostrar un ejemplo sencillo de como realizar un
control personalizado
, éste simplemente va a extender el control TextBox
que trae el .NET Framework, haciendo que sólo acepte valores definidos en una expresión
regular.