asp.net custom-server-controls

Controles personalizados ASP.NET



custom-server-controls (4)

Crea la clase para el control y crea la solución. Si todo va bien, el control ahora debería estar disponible en la caja de herramientas.

A veces, el VS no actualiza la caja de herramientas. Si eso sucede, agregue la directiva Register a la página:

<%@ Register Assembly="NAME_OF_THE_ASSEMBLY" Namespace="NAMESPACE_OF_THE_CUSTOM_CONTROL" TagPrefix="cc1" %>

entonces solo usa el control en la página:

<cc1:mycustompanel id="MyCustomPanel1" runat="server"><asp:TextBox id="TextBox1" runat="server"></asp:TextBox></cc1:mycustompanel>

¿Cómo se crea un control personalizado (no un control ASCX) y, lo que es más importante, se lo usa en su proyecto? Preferiría no crear un proyecto separado para él o compilarlo como un archivo DLL


Los controles del servidor deben compilarse en una DLL. No debe haber ningún motivo para temer tener un ensamblaje adicional en su proyecto, y ayuda a crear una buena organización del proyecto.

Los controles del servidor ASP.NET son realmente clases personalizadas en un ensamblado. No tienen un archivo de marcado "ascx" asociado a ellos.

Para usar un Control de servidor ASP.NET, necesita decirle a ASP.NET dónde buscar su clase.

Primero, crea un proyecto de Biblioteca de clases y agrégalo a tu solución. Llamaré al mío "CustomControls.dll".

Una vez allí, agregue una clase simple para ser su webcontrol:

public class Hello : System.Web.UI.WebControl { public override Render(HtmlTextWriter writer) { writer.Write("Hello World"); base.Render(writer); } }

Cree su proyecto y agréguelo como referencia a su proyecto web principal.

Ahora, en la página ASPX que desea usar este control, necesita registrarlo, así que agréguelo como la primera línea en el aspx DESPUÉS de la Directiva de página:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %>

Ahora, debe tener un control llamado <Ejemplo: Hello> disponible para usted. Puede tardar un minuto en aparecer en intellisense.


Si no desea un archivo * .ascx, no desea un proyecto separado y no desea un archivo * .dll, ¿qué cree que le queda? El código tiene que vivir en algún lugar.


Mencionaste que querías evitar crear un proyecto separado. Como han indicado las otras respuestas, es mucho más común simplemente crear un nuevo proyecto para almacenar sus controles personalizados y referenciarlo. Sin embargo, es posible registrar un control definido en el mismo proyecto, utilizando la sintaxis regular:

<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly="CustomControls" %>

Donde la "Asamblea" es el conjunto donde están ubicados tanto el control como la página. Esto funciona mucho más fácilmente si está utilizando un Proyecto de aplicación web, en lugar de un Sitio web.