Cuando queremos utilizar un control en una p├ígina Web, sea este un Webcontrol o un control de usuario (.ascx) tenemos que a├▒adir siempre en la cabecera, justo despu├ęs de la directiva de p├ígina, una directiva especial que define d├│nde encontrar el control y c├│mo trabajar con ├ęl. Por ejemplo:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register Assembly="ControlescampusMVP" Namespace="ControlescampusMVP" TagPrefix="mvp" %>
<%@ Register TagPrefix="kwc" TagName="cabecera" src="Controles/Cabecera.ascx" %>

La primera l├şnea es la directiva de p├ígina. Las que nos interesan son las otras dos.

La primera directiva de control registra todos los controles contenidos dentro del ensamblado controlescampusMVP.dll y, dentro de ├ęste, todos los contenidos en el espacio de nombres ControlescampusMVP (lo he sacado de un ejemplo del curso de preparaci├│n del examen 70-528 de campusMVP) para que puedan ser utilizados enla p├ígina actual usando el prefijo "mvp". As├ş podr├şamos usar un control de esa DLL cone sta sintaxis:

<mvp:mailToLink ID="MailtoLink1" runat="server" EMail="[email protected]">Mandame un correo</mvp:mailToLink>

La segunda l├şnea se usa para definir un control de usuario "cabecera" cuyo c├│digo est├í ubicado en el archivo Cabecera.ascx dentro de la carpeta Controles. Algo muy t├şpico para reutilizar partes de la interfaz de usuario. Este control s├│lo hay que arrastrarlo desde el explorador de proyectros sobre la p├ígina para obtener una sintaxis similar a esta:

<kwc:cabecera ID="Cabecera1" runat="server" />

Bueno, hasta aqu├ş todo normal y nada nuevo.

Lo que ocurre con la t├ęnica anterior, que por otro lado es la que usa todo el mundo, es que si tenemos el control o controles ubicados en muchas p├íginas ASPX de nuestro proyecto y, de repente, decidimos cambiar la ubicaci├│n de los archivos .ascx o el nombre de una clase, o cualquier otra de las variables que est├ín afectadas por las directivas Register, tendremos que recorrer todas y cada una de las p├íginas para retocar la defici├│n de los controles. Mala cosa, s├ş se├▒or :-(

Existe una solución mejor que nos permite tener esas definiciones en un solo punto de la aplicación y poder utilizar los controles en cualquier página. De este modo sólo los definimos una vez y si necesitamos retocar esas directivas no tendremos que recorrernos la aplicación entera para hacerlo.

El "truco" es incluir la definici├│n de los controles en el web.config, as├ş:

  <system.web>
    <pages>
      <controls>
        <add tagPrefix="mvp" assembly="ControlescampusMVP"/>
        <add tagPrefix="kwc" tagName="Cabecera" src="~/Controles/Cabecera.ascx"/>
      </controls>
    </pages>
  </system.web>

Ahora tenemos definidos los prefijos y los controles en el ámbito global de nuestra aplicación y podemos ponerlos directamente en los formularios sin necesidad de tener que declararlos en cada uno, con las ventajas consabidas.

Antes de que nadie me lo pregunte: no, el hacer esto no implica ning├║n tipo de merma de rendimiento por el hecho de tener disponibles los controles en todas las p├íginas, ya que si no se utilizan ASP.NET hace caso omiso de la definici├│n, y si se utilizan el c├│digo generado es exactamente el mismo (s├│lo hay que ir a la carpeta temporal de ASP.NET y ver el c├│digo autogenerado all├ş).

De hecho esta t├ęcnica es la que usa la propia plataforma .NET puesto que si vamos al archivo web.config global de la maquina vemos que lo usa, por ejemplo, para incluir a los controles de WebParts.

💪🏻 ┬┐Este post te ha ayudado?, ┬┐has aprendido algo nuevo?
Pues NO te pido que me invites a un caf├ę... Te pido algo m├ís f├ícil y mucho mejor