79 votes

Le nom 'controlname' n'existe pas dans le contexte actuel.

J'ai une application web sur laquelle je travaille (ASP.NET2.0 avec C#, en utilisant VS2005). Tout fonctionnait bien, et tout à coup, je reçois l'erreur :

Error 1 The name 'Label1' does not exist in the current context

et 43 autres du même genre à chaque fois que j'ai utilisé un contrôle dans le code de la page.

Cela ne se produit que pour une page. Et c'est comme si le codebehind ne reconnaissait pas les contrôles. Une autre chose intéressante est que l'intellisense ne détecte aucun des contrôles non plus

J'ai essayé de nettoyer le fichier de la solution, de supprimer le fichier obj, d'exclure les fichiers du projet puis de les réinsérer, de fermer VS et de le redémarrer, et même de redémarrer mon ordinateur, mais rien de tout cela n'a fonctionné.

2 votes

La bonne réponse à cette question est dans la réponse trouvée ici : stackoverflow.com/a/1981228/168703

1 votes

Vérifiez également l'espace de nom dans le designer.cs ; parfois, après avoir renommé une page aspx, l'espace de nom est simplement supprimé du designer.cs.

0 votes

Cela peut se produire après avoir copié les balises du contrôle à partir d'un autre fichier .aspx. J'ai supprimé les balises copiées et écrit manuellement les balises du contrôle et l'erreur a disparu.

120voto

RobotNerd Points 1072

Je sais que c'est une vieille question, mais j'ai eu un problème similaire et je voulais poster ma solution au cas où elle pourrait profiter à quelqu'un d'autre. J'ai rencontré le problème en apprenant à utiliser :

  • ASP.NET 3.5
  • C#
  • VS2008

J'essayais de créer une page compatible AJAX (consultez un tutoriel sur l'utilisation de l'objet ScriptManager si vous n'êtes pas familier avec cela). J'ai essayé d'accéder aux éléments HTML de la page via le code C#, et j'ai obtenu une erreur indiquant que l'identifiant de la valeur HTML ID "n'existe pas dans le contexte actuel".

Pour le résoudre, j'ai dû procéder comme suit :

1. Exécution sur le serveur

Pour accéder à l'élément HTML en tant que variable dans le code C#, la valeur suivante doit être placée dans la balise de l'élément HTML dans le fichier aspx :

runat="server"

Certains objets de la boîte à outils de l'EDI Visual Studio n'incluent pas automatiquement cette valeur lorsqu'ils sont ajoutés à la page.

2. Régénérez le fichier C# généré automatiquement :

  • Dans l'explorateur de solutions, sous le fichier aspx, il devrait y avoir deux fichiers : *.aspx.cs et *.aspx.designer.cs. Le fichier du concepteur est généré automatiquement.
  • Supprimez le fichier *.aspx.designer.cs existant. Veillez à ne supprimer que le fichier designer fichier. Ne supprimez pas l'autre, car il contient votre code C# pour la page.
  • Faites un clic droit sur le fichier aspx parent. Dans le menu contextuel, sélectionnez Convertir en application Web .

Maintenant l'élément devrait être accessible dans le fichier de code C#.

2 votes

Pour info, l'option "Convertir en application Web" est également disponible sur les dossiers et les projets.

9 votes

L'option numéro 2 était la réponse parfaite pour moi pour résoudre ce problème lorsque je l'ai rencontré aujourd'hui !

20 votes

Pour info, dans Visual Studio 2013, l'option "Convertir en application Web" a été déplacée dans le menu Projet : stackoverflow.com/questions/19561982/

47voto

CMS Points 315406

Vérifiez votre code derrière le nom de fichier et la propriété Inherits de la directive @Page, assurez-vous qu'ils correspondent tous les deux.

1 votes

Cela a fait l'affaire pour moi aussi ! Un espace de nom était erroné et quand je l'ai corrigé dans la directive @Page, pouf, les erreurs ont disparu.

1 votes

Même chose ici, avec un petit ajout : Assurez-vous que vous vérifiez que le nom de la classe est entièrement qualifié. Pour une raison quelconque, VS a changé le mien en Inherits="KioskB" alors qu'il devait être "MyNamespace.KioskB". Cela semblait correct jusqu'à ce que je compare le balisage à une autre des pages et que je remarque que la partie espace de nom avait disparu.

34voto

mosheb Points 405

Exclure toutes les autres pages qui font référence au même fichier code-behind, par exemple une ancienne page que vous avez copiée et collée.

0 votes

Ou copier l'élément "Label1" sur cette autre page.

14voto

user735232 Points 121

J'ai eu le même problème. Il s'avère que j'avais à la fois "MyPage.aspx" et "Copy of MyPage.aspx" dans mon projet.

3voto

Protector one Points 1546

Vérifiez également que vous n'avez pas de fichiers qui tentent accidentellement d'hériter ou de définir la même classe (partielle) que d'autres fichiers. Notez que ces fichiers peuvent sembler sans rapport avec les fichiers où l'erreur est réellement apparue !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X