2010-06-09 44 views
10

Creé un control personalizado simple que solo hereda del control Literal, y aún no tiene extensiones, el código está vacío.Control personalizado en ASP.NET C#

Espacio de nombres: CustomControls

Nombre de clase: literal: System.Web.UI.WebControls.Literal

siguiente cosa que se está registrando este control en la página aspx de la siguiente manera:

<%@ Register TagPrefix="web" Namespace="CustomControls" %> 

(He leído en algunos tutoriales que esta es una de las maneras de registrarlo, además de web.config, etc.)

Después de todo, no inte para mí, y lo que es peor, obtengo un error de análisis 'etiqueta de servidor desconocida: web' cuando intento ejecutar la página con el control en ella.

Utilicé 'crear nuevo proyecto' y no un nuevo sitio web, en caso de que esta información sea necesaria.

¿Cuál podría ser mi problema?

Gracias de antemano.

+0

¿A qué se refieren exactamente por "create new project"? Archivo -> Nuevo -> Proyecto -> ... (al menos en VS 2005) Y entonces, ¿qué significaba? Eso podría ser importante (es decir, ¿eligió Other Languages ​​-> Visual C# -> Web -> whatever?). Y necesitas una asamblea en algún momento; la pregunta es si tienes que nombrarla explícitamente (y creo que debes hacerlo si no estás utilizando un proyecto de "sitio web" ya que no tienes una carpeta App_Code). – scherand

+0

¿Dónde existe su clase de control personalizado? ¿Es un archivo de clase en el proyecto del sitio web o está en su propio proyecto? –

+0

Entonces, ¿tiene dos proyectos uno para el 'CustomControls' y otro para el proyecto web? – Craig

Respuesta

25

Aquí es cómo lo hice , paso a paso, comenzando desde la nada Este primer método usa un segundo proyecto/ensamblaje. Para la versión de App_code desplácese hacia abajo.

web del método de proyecto de aplicación

  1. Crear una nueva aplicación Web ASP.Net. Tome nota del nombre, el mío se llama WebApplication2. Si ya tiene una aplicación web existente, lo cual es probable, haga doble clic en la sección de propiedades de su proyecto y verifique la propiedad "Nombre del ensamblado", anótelo.
  2. crear una nueva clase en el applcation web llamado Literal.cs
  3. Poner en un código similar al siguiente para la clase Defenition:

    namespace CustomControls 
    { 
        public class Literal : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  4. Añadir la siguiente etiqueta de registro a la parte superior de su aspx página

    <% ensamblaje @ Register = " WebApplication2 " espacio de nombres = " CustomControls " TagPrefix = " web "% >

Si su nombre de ensamblado era diferente entonces cambiar aquí. Me di cuenta de que cuando hice esto en VB.Net, el espacio de nombres era WebApplication1.CustomControls en lugar de solo CustomControls, como en C#, algo extraño.

  1. Añadir el nuevo control a su página:

    < web: Literal ID = " Literal1 " runat = " servidor " Text = " prueba "/>

Proyecto separada Método

  1. Cree un nuevo sitio web vacío (ASP.Net).
  2. Agregue una nueva biblioteca de control de servidor ASP.Net llamada CustomControls a la solución.
  3. Agregue una nueva clase al nuevo proyecto llamado Literal (estoy usando C# para que mi archivo se llame Literal.cs). A continuación se muestra mi código super básico, que creo debería coincidir con el código descrito en la pregunta.

    namespace CustomControls 
    { 
        public class Literal : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  4. Agregue una referencia al proyecto CustomControls a su sitio web.

  5. Añadir el registro de montaje a la parte superior de la página aspx:

    <% ensamblaje @ Register = " CustomControls " espacio de nombres = " CustomControls " TagPrefix = " web "% >

  6. Añadir un nuevo instancia del control de su página:

    < web: ID literal = " Literal1 " runat = " servidor " Text = " prueba "/>

En App_Code Método

  1. Crear un nuevo sitio web vacío (ASP.Net).
  2. Agregue una nueva clase a la carpeta App_Code Literal2 (estoy usando C# para que mi archivo se llame Literal2.cs). A continuación se muestra mi código super básico, que creo debería coincidir con el código descrito en la pregunta.Lo llamé 2 de modo que usted puede utilizar esto en conjunción con el método descrito anteriormente sin obtener errores de compilación

    namespace CustomControls 
    { 
        public class Literal2 : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  3. Registrar el ensamblado/espacio de nombres para App_Code en su página aspx añadiendo la siguiente línea a la

    superior

    <% @ Register namespace = " CustomControls " Asamblea = " __code " TagPrefix = " web "% >

  4. Añadir una instancia del nuevo mando a su página:

    < web: Literal2 ID = " literal2 " runat = " servidor " Text = " test2 "/>

Probé esto utilizando Visual Studio y todo funcionó bien para mí.

+0

Gracias por la información detallada, esto funciona perfectamente en el sitio web proyecto. el problema es con WebApplicationProject en VS2008. – Mahes

+1

@Mahes: actualicé mi respuesta para incluir Direcciones de aplicaciones web (están en la parte superior). – Peter

+0

@Mahes - Por favor, avíseme si el código que publiqué no funciona para usted. – Peter

2

También puede registrar su control en el web.config si desea utilizarlo en otras páginas

<pages> 
     <controls> 
      <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" /> 
     </controls> 
     </pages> 

para el sitio web que esto funcionará

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" /> 
+1

Gracias por la respuesta, Lo que pasa es que aún no tengo ningún archivo de ensamblaje y, como entiendo, el control solo se puede registrar mediante el prefijo de etiqueta y el espacio de nombres, incluso sin ensamblaje. estoy en lo cierto? – geevee

+1

Si ha creado un proyecto de aplicación web, tendrá un ensamblaje, consulte: http://dl.dropbox.com/u/6561262/project-settings.png – orjan

2

El problema radica en su etiqueta <%@ Register TagPrefix="web" Namespace="CustomControls" %>: ¡omite el nombre del ensamblado!

Debe convertirse en <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>. Si tiene dificultades para encontrar el nombre de ensamblado para su clase aquí hay algunos consejos:

  1. Si ha creado la clase dentro de proyecto de Visual Studio de la aplicación web, o en un archivo DLL separada del proyecto (biblioteca compartida), a continuación, derecha clic en el proyecto e ir a Propiedades para obtener el nombre de ensamblado
  2. Si creó el archivo .cs en el directorio App_Code, ASP.App_Code debería funcionar

en caso contrario por favor, nos dan alguna información sobre el diseño del proyecto!

+0

gracias. incluso especificar el nombre del ensamblaje no supera el problema con WebApplicationProject en VS2008 – Mahes

1

Lo más fácil es arrastrar y soltar Literal.ascx en la página (si la página está en la misma solución). Si la página es otra solución, puede agregar el control a la caja de herramientas de VS. y arrastre y suelte el control en la página.

0

Olvidó el atributo src.

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
Cuestiones relacionadas