2010-01-05 34 views
38

He hecho un control personalizado que hereda de un control literal. Cuando intento usar mi control en una página, se produce un error de análisis. He añadido esto a mi web.configControl personalizado ASP.NET - Etiqueta de servidor desconocido

<configuration> 
    <system.web> 
    <pages> 
     <controls> 
     <add tagPrefix="one" namespace="myApplication.Controls"/> 
     </controls> 
    </pages> 
    </system.web> 
</configuration> 

Y he añadido esto a mi página

<%@ register namespace="myApplication.Controls" tagprefix="one" %> 

Ninguno de ellos han solucionado el problema. Tengo un ensamblaje externo con algunos controles personalizados que funcionan perfectamente en mi proyecto. Como solución, estoy considerando mover mi control personalizado a la biblioteca externa si no hay una solución simple.

--edit

Aquí está el código de la página.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SignUp.ascx.cs" Inherits="myApplication.Controls.SignUp" %> 
<%@ register namespace="myApplication.Controls" tagprefix="one" %> 
<div class="in"> 
    <span>  
     <one:resourceliteral id="lblFirstname" runat="server" resourcekey="FirstName" resourceresolver="ResourceStringResolver.GetResourceString"> 
     </one:resourceliteral>  
     </span> 
    <div> 
     <pl:textbox id="txtFirstName" runat="server"></pl:textbox> 
    </div> 
</div> 

Y aquí está el código de mi control real

namespace myApplication.Controls 
{ 
    public class ResourceLiteral : Literal 
    { 
     private ResourceManager rm; 

     public delegate string dResourceResolver(string label, eLanguage language); 

     public event dResourceResolver ResourceResolver; 

     public string ResourceKey { get; set; } 
     public object DataSource { get; set; } 

     private eLanguage _Language = eLanguage.ENUS; 
     public eLanguage Language 
     { 
      get { return _Language; } 
      set { _Language = value; } 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      if (ResourceResolver != null) 
       Text = ResourceResolver.Invoke(ResourceKey, _Language); 
      else 
      { 
       if(rm != null) 
       { 
        Text = rm.GetString(ResourceKey); 
       } 
      } 
     } 

     public void LoadDataSource(string resource) 
     { 
      rm = new ResourceManager(resource, Assembly.GetExecutingAssembly()); 
     } 

     public void LoadDataSource(Type resource) 
     { 
      rm = new ResourceManager(resource); 
     } 
    } 
} 
+0

Necesitamos el código que está escribiendo que utiliza el control real =) – zincorp

+0

la página ascx y el código están en un ensamblaje externo? – jim

Respuesta

70

Al agregar un espacio de nombres, he encontrado también necesito el montaje. Si el montaje es también myApplication hacer esto en web.config:

<add tagPrefix="one" namespace="myApplication.Controls" assembly="myApplication"/> 

Entonces, sólo limpia y reconstruir y debería funcionar. Una vez que esto esté en su web.config, no necesita agregarlo a su página a menos que esté usando esto en un control en el mismo directorio, entonces necesitará la referencia en la parte superior del formulario web. Pero, recomiendo no usar controles de servidor personalizados en el mismo directorio que los controles de usuario.

+3

Eso es tan estrangulador e que requiere el ensamblaje, aunque el control se encuentre dentro de la aplicación. Gracias por tu ayuda. – Matt

+3

Puedo ver por qué esta respuesta tiene tantos votos. – ProfK

1

Si te entiendo correctamente, ¿tu control está dentro del mismo proyecto?

intenta registrar el control en el marcado de la página con el siguiente:

<%@ Register Src="~/controls/foo.ascx" TagName="foo" TagPrefix="uc" %> 

Con <uc:foo ID="foo1" runat="server"/> puede incluir el control en el margen de beneficio. Si esto no funciona, es probable que su control no pueda compilarse. Comente cosas innecesarias y pruébelo nuevamente.

+3

No es un control web que intento usar en mi página. Es un control personalizado que hereda de la clase System.Web.UI.WebControls.Literal. – Matt

0

También tuve este problema al publicar mi aplicación ASP.NET Web Forms. Incluso al copiar y pegar la carpeta al IIS del servidor, sin publicarlo, ocurrieron sistemáticamente problemas similares en las páginas que usaban los controles personalizados/controles de usuario.

He registrado correctamente los controles en web.config y en mi máquina de desarrollo las cosas funcionaban bien. Pensé que el proceso de registro estaba bien.

para solucionar el problema en el proceso de implementación de publicación/copiar y pasado, usted debe volver a registrar espacios de nombres y ensamblados todos los de los controles de usuario en cada página (.aspx) que los utiliza:

<%@ Register TagPrefix="mycompany" Namespace="MyCompany.Web.Forms.Controls" Assembly="MyCompany.Web" %> 
<%@ Register TagPrefix="mycomapny" Namespace="MyCompany.Web.Forms.Controls.ValidatorComponents" Assembly="MyCompany.Web" %> 

favor tenga en cuenta que es la misma mentalidad para controles personalizados o controles de usuario. Este problema ocurrió incluso en VS 2012 pero aún así .NET 4.0. Este proceso también es necesario cuando el skin de ASP.NET hace referencia a dichos controles.

1

Recibí el error "Etiqueta de servidor desconocido" para un control de usuario que era parte de mi proyecto. No hubo ensamblaje externo. @citronas mencionó que "si esto no funciona, es probable que tu control no pueda compilarse".", y que también aparece como la causa más probable en this troubleshooting post.

Aunque mi código de control se estaba compilando sin errores, resultó que había advertencias que estaba ignorando. Mis advertencias se referían a un archivo de recursos que estaba en mi carpeta de control que hacía referencia a otro archivo perdido. Una vez que abordé las advertencias, el control se compiló correctamente y pude usar el control con solo una directiva Register y sin modificaciones a web.config, como esta:

<%@ Register TagPrefix="myPrefix" TagName="myControl" Src="~/controls/mySourceFile.ascx" %> 

<myPrefix:myControl runat="server"></myPrefix:myControl> 
Cuestiones relacionadas