2010-01-05 17 views
38

Ho creato un controllo personalizzato che eredita da un controllo letterale. Quando provo a usare il mio controllo su una pagina, viene generato un errore di analisi. Ho aggiunto questo al mio web.configControllo personalizzato ASP.NET - Tag del server sconosciuto

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

E ho aggiunto questo alla mia pagina

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

Nessuno di questi hanno risolto il problema. Ho un assembly esterno con alcuni controlli personalizzati che funzionano perfettamente nel mio progetto. Come soluzione, sto considerando di spostare il mio controllo personalizzato nella libreria esterna se non c'è una soluzione semplice.

--edit

Ecco il codice della pagina.

<%@ 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> 

Ed ecco il codice per il mio vero e proprio controllo

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

Abbiamo bisogno del codice che stai scrivendo che utilizza il controllo effettivo =) – zincorp

+0

la pagina ascx e il codice sono in un assieme esterno? – jim

risposta

70

Quando si aggiunge uno spazio dei nomi, ho trovato ho anche bisogno l'assemblaggio. Se il montaggio è anche myApplication farlo in web.config:

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

Poi, appena pulita e ricostruire e si deve lavorare tutti. Una volta che questo è nel tuo web.config, non è necessario aggiungerlo alla tua pagina a meno che tu non stia usando questo in un controllo nella stessa directory, quindi avrai bisogno del riferimento nella parte superiore del modulo web. Ma, mi raccomando contro l'utilizzo di controlli server personalizzati nella stessa directory dei controlli utente.

+3

Questo è così strano e che richiede l'assemblaggio, anche se il controllo è all'interno dell'app. Grazie per l'aiuto. – Matt

+3

Posso capire perché questa risposta ha così tanti voti. – ProfK

1

Se ho capito bene, il controllo è all'interno dello stesso progetto?

Prova a registrare il controllo nel codice della tua pagina con il seguente:

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

Con <uc:foo ID="foo1" runat="server"/> è possibile includere il controllo nel markup. Se questo non funziona, probabilmente il tuo controllo non può essere compilato. Commenta le cose inutili e riprova.

+3

Non è un controllo web che sto tentando di utilizzare sulla mia pagina. È un controllo personalizzato che eredita dalla classe System.Web.UI.WebControls.Literal. – Matt

0

Ho riscontrato questo problema durante la pubblicazione della mia applicazione Web Form ASP.NET. Anche quando si copia e incolla la cartella su IIS del server, senza pubblicarla, si sono verificati sistematicamente problemi simili nelle pagine che utilizzavano controlli personalizzati/controlli utente.

Ho registrato correttamente i controlli su web.config e sulla mia macchina dev funzionava tutto ok. Pensavo che il processo di registrazione fosse ok.

per risolvere il problema sul processo di distribuzione pubblicare/copia-e-passato, è necessario registrare nuovamente i namespace e le assemblee di tutti i dei controlli utente in ogni pagina (aspx) che li utilizza:

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

prega si noti che è lo stesso modo di pensare per i controlli personalizzati o i controlli utente. Questo problema si è verificato anche in VS 2012 ma ancora in .NET 4.0. Questo processo è anche necessario quando lo skin ASP.NET fa riferimento a tali controlli.

1

Stavo ricevendo l'errore "Tag del server sconosciuto" per un controllo utente che faceva parte del mio progetto. Non c'era un assemblaggio esterno. @citronas ha detto che "Se questo non funziona, probabilmente il tuo controllo non può essere compilato.", e che è anche elencata come la causa più probabile in this troubleshooting post.

Anche se il mio codice di controllo si stava compilando senza errori, si è scoperto che c'erano degli avvertimenti che stavo ignorando. I miei avvertimenti riguardavano un file di risorse che era in la mia cartella di controllo che faceva riferimento a un altro file mancante. Una volta indirizzata le avvertenze, il controllo è stato compilato correttamente e sono stato in grado di utilizzare il controllo con solo una direttiva Register e nessuna modifica a web.config, come ad esempio:

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

<myPrefix:myControl runat="server"></myPrefix:myControl> 
Problemi correlati