Posts filed under ‘controladapters’

Control Adapters en .NET 2

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

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


Categorías

octubre 2019
L M X J V S D
« Sep    
 123456
78910111213
14151617181920
21222324252627
28293031  

Entradas recientes

Mis links en del.icio.us

Feeds