Control Adapters en .NET 2

septiembre 25, 2015 at 3:31 pm Deja un comentario

Los controles de .NET son una maravilla porque te facilitan la tarea de programar y ha supuesto para el concepto de programación web un antes y un después. Con .NET te olvidas casi por completo que existen los comandos Request.Form o Request.QueryString porque se ven sustituidos por los controladores de eventos.

No obstante, tienen un handicap a primera vista en la versión 1.1 e incluso en la 2, que el renderizado ya venía con el sello de fábrica Microsoft y con el marcado (HTML) que ellos han decidido. Para los que trabajamos con niveles de accesibilidad AAEste enlace abre una nueva ventana esto supone una torturaporque la doble AA por ejemplo no te permite incluir inline el width o dejar etiquetas style etc…

Entonces llega el programador listillo y dice .NET me da la posibilidad de crear un control que herede del control original de .NET , le hago un render con un override y “p’alante”. Al estilo de esto:

    public class AccessibleImageButton : System.Web.UI.WebControls.ImageButton

{

protected override void Render(HtmlTextWriter output)

{

System.Text.StringBuilder sb = new System.Text.StringBuilder();

 

System.IO.StringWriter sw = new System.IO.StringWriter(sb, System.Globalization.CultureInfo.CurrentCulture);

 

HtmlTextWriter mywriter = new HtmlTextWriter(sw);

 

base.Render(mywriter);

 

mywriter.Close();

 

sw.Close();

 

string s = sb.ToString();

 

s = s.Replace(“style=\”border-width:0px;\””, String.Empty);

 

output.Write(s);

 

}

 

 

}

Desde luego este tipo de código es totalmente válido e inevitable si además queremos añadirle funcionalidades nuevas al control. Por ejemplo, si queremos que las rutas de una imagen vaya a una carpeta determinada dependiendo si una sesión “contraste” se ha activado, y si no, a otra para imágenes normales.

Sin embargo: en .NET 2 se ha creado un nuevo mecanismo built-in y que han venido a llamar “control adapters“.
Estos controladores te permite crear, digamos, un plug-in para cualquier control de servidor, y modificarlo para cambiar su lógica de renderizado.

¿Cuál es la ventaja?
Así a bote pronto, es menos engorroso y sobre todo, se hace a un nivel global dentro de la web.

¿Cómo funcionan los control adapters?
Se utiliza un nuevo tipo de archivo de extensión “.browser” que se coloca en la carpeta “App_browsers” que hará que se produzca el override de los controles que se especifique automáticamente para todo el sitio web:

appbrowsers

El código necesario por ejemplo para reescribir el renderizado de un ImageButton sería el siguiente: Archivo “.browser” dentro de carpeta App_Browsers:

<browsers>

 

<browser refID=”Default”>

<controlAdapters>

 

<adapter controlType=”System.Web.UI.WebControls.ImageButton”

adapterType=”ImageButtonControlAdapter” />

 

</controlAdapters>

</browser>

 

</browsers>

Clase para el Adaptador que referenciamos en el “.browser” y que normalmente puede ir en App_Code pero también se puede poner en un proyecto aparte:

public class ImageButtonControlAdapter : System.Web.UI.Adapters.ControlAdapter

{

protected override void Render(System.Web.UI.HtmlTextWriter output)

{

System.Text.StringBuilder sb = new System.Text.StringBuilder();

 

System.IO.StringWriter sw = new System.IO.StringWriter(sb, System.Globalization.CultureInfo.CurrentCulture);

 

HtmlTextWriter mywriter = new HtmlTextWriter(sw);

 

base.Render(mywriter);

 

mywriter.Close();

 

sw.Close();

 

string s = sb.ToString();

 

s = s.Replace(“style=\”border-width:0px;\””, String.Empty);

 

output.Write(s);

 

}

}

 

En este caso lo que estamos haciendo es buscar un estilo que se inserta automáticamente en los ImageButton y que no podemos dejar si queremos cumplir el nivel AA de accesibilidad web.

Anuncios

Entry filed under: controladapters.

App_offline.htm The base class includes the field ‘X’, but its type is not compatible

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Categorías

septiembre 2015
L M X J V S D
« Ene    
 123456
78910111213
14151617181920
21222324252627
282930  

Entradas recientes

Mis links en del.icio.us

Feeds


A %d blogueros les gusta esto: