Antes de entrar de lleno en toda la parafernalia de los webparts, voy a hacer una breve definición de un webparts. Se podría decir que es un bloque de nuestra web, con un determinado contenido, que los usuarios pueden personalizar a su gusto y antojo (Moviéndolo, ocultándolo, cerrándolo, etc), y dichos cambios se guardarán para posteriores visitas a la pagina donde se encuentren dichos webparts.
Vale!!! Esto está muy bien, pero… ¿cómo se crean los webparts? … Tranqui!!! Decirte que es sencillismo. Basta con crear una página web, añadir un control "WebPartManager" (este control es el primero que se debe de introducir o agregar antes que cualquier otro control, si no, no funcionará ok?. bien, sigo!! aaa!! Una cosa… cuando agregeís el WebPartManager, no os extrañeís al ver un recuadro gris, los WebPartManager no tienen un diseño. Sigo!!! (que me estoy enrrollando ya) A continuación agregaremos uno y varios controles "WebPartZone" (Consejo: Yó, antes de agregar los webparzone, añado una tabla la cual me delimitará las zonas donde se verán mis webparts). Tras agregar los webpartzone, ya puedo arrastrar cualquier control de la caja de herramientas dentro de las zonas y ¡VOILA!, ya tenemos un webpart, parece facil no? jejejeje! ¿Como es esto posible? Pues gracias a la clase "GenericWebParts".
Cada vez que arrastremos un control (por ejemplo un "Label") a una zona, Visual Studio creará como un envoltorio (wrapper) alrededor de dicho control, conviertiendoló en un GenericWebPart. El tener un envoltorio, el control agregado pasa a tener una serie de propiedades que de otra forma no tendría. Estas propiedades son tales como: "Title", "Descripción", "TitleIconImageUrl", "TitleUrl" y CatalogIconImageUrl". Además, gracias a este envoltorio podemos establecer comunicaciones de datos entre diferentes WebParts.
En realidad no todos los controles son iguales de buenos para ser convertidos en WebParts. Tomemos por ejemplo los controles "Literal". Si añadimos un literal a una zona tendremos un webParts pero sin embargo no tendremos las nuevas propiedades comentadas anteriormente. Entonces ¿Donde está la diferencia entre un Label y un literal? Pues que el Label desciende de la clase "Control", mientras que el segundo lo hace de "webControl". La clase "WebControl" implementa una serie de interfaces que son los que posibilitan que el envoltorio añada nuevas propiedades a nuestros controles, con lo que hay unas ciertas limitaciones. Lo primero que para empezar con webparts genericos no podremos aprovechar todas las posibilidades de los webparts. No podríamos, por ejemplo, añadir nuevas acciones al menu contextual, ni podríamos definir nuestras propias propiedades personalizables, por el usuario final.