ASP.NET Custom Control – Balise serveur inconnue

J’ai créé un contrôle personnalisé qui hérite d’un contrôle Literal. Lorsque j’essaie d’utiliser mon contrôle sur une page, une erreur d’parsing est lancée. J’ai ajouté ceci à mon web.config

         

Et j’ai ajouté ceci à ma page

  

Ni l’un ni l’autre n’a résolu le problème. J’ai un assemblage externe avec des contrôles personnalisés qui fonctionnent très bien dans mon projet. En guise de solution de contournement, j’envisage de déplacer mon contrôle personnalisé dans la bibliothèque externe s’il n’y a pas de solution simple.

–modifier

Voici le code de la page.

   

Et voici le code de mon contrôle actuel

 namespace myApplication.Controls { public class ResourceLiteral : Literal { private ResourceManager rm; public delegate ssortingng dResourceResolver( ssortingng label, eLanguage language ); public event dResourceResolver ResourceResolver; public ssortingng 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.GetSsortingng( ResourceKey ); } } } public void LoadDataSource(ssortingng resource) { rm = new ResourceManager( resource, Assembly.GetExecutingAssembly() ); } public void LoadDataSource(Type resource) { rm = new ResourceManager( resource ); } } } 

    Lors de l’ajout d’un espace de noms, j’ai trouvé que j’avais également besoin de l’assemblage. Si votre assembly est aussi myApplication faites ceci dans web.config:

      

    Ensuite, nettoyez et reconstruisez et tout devrait fonctionner. Une fois que cela se trouve dans votre fichier web.config, vous n’avez pas besoin de l’append à votre page, sauf si vous l’utilisez dans un contrôle du même répertoire. Vous aurez alors besoin de la référence en haut du formulaire Web. Mais, je vous déconseille d’utiliser des contrôles serveur personnalisés dans le même répertoire que les contrôles utilisateur.

    Si je vous comprends bien, votre contrôle est dans le même projet?

    Essayez d’enregistrer le contrôle dans le balisage de votre page avec les éléments suivants:

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

    Avec vous pouvez inclure le contrôle dans le balisage. Si cela ne fonctionne pas, votre contrôle ne peut probablement pas être compilé. Commentez les choses inutiles et réessayez.

    Je recevais l’erreur “Unknown server tag” pour un contrôle utilisateur qui faisait partie de mon projet. Il n’y avait pas d’assemblage externe. @citronas a mentionné que “Si cela ne fonctionne pas, votre contrôle ne peut probablement pas être compilé.”, et c’est aussi la cause la plus probable dans ce post de dépannage .

    Bien que mon code de contrôle comstack sans erreurs, il s’est avéré que certains avertissements étaient ignorés. Mes avertissements concernaient un fichier de ressources qui se trouvait dans mon dossier de contrôle et qui faisait référence à un autre fichier manquant. Une fois les avertissements adressés, le contrôle a été compilé correctement et j’ai pu utiliser le contrôle avec une seule directive Register et aucune modification à web.config, comme ceci:

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

    J’ai également eu ce problème lors de la publication de mon application ASP.NET Web Forms. Même lors de la copie et du collage du dossier sur IIS du serveur sans le publier, des problèmes similaires sur les pages utilisant les contrôles / contrôles utilisateur personnalisés se sont produits systématiquement.

    J’ai enregistré correctement les contrôles sur web.config et sur mon ordinateur, les choses fonctionnaient correctement. Je pensais que le processus d’enregistrement était correct.

    Pour résoudre le problème lors du processus de publication / copie et de déploiement passé, vous devez réenregistrer tous les espaces de noms et tous les assemblys des contrôles utilisateur sur chaque page (.aspx) qui les utilise:

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

    S’il vous plaît noter que c’est la même mentalité pour les contrôles personnalisés ou les contrôles utilisateur. Ce problème s’est produit même dans VS 2012 mais toujours .NET 4.0. Ce processus est également nécessaire lorsque l’habillage ASP.NET fait référence à ces contrôles.