web-dev-qa-db-fra.com

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

J'ai une application Web sur laquelle je travaille (ASP.NET2.0 en C #, à l'aide de VS2005). Tout fonctionnait bien, et tout à coup, j'ai l'erreur:

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

et 43 autres du genre pour chaque fois que j'ai utilisé un contrôle dans mon code derrière la page.

Cela ne se produit que pour 1 page. Et c'est comme si le code arrière ne reconnaissait pas les contrôles. Une autre chose intéressante est que l’intellisense ne détecte aucune des commandes non plus.

J'ai essayé de nettoyer le fichier de solution, de supprimer le fichier obj, d'exclure les fichiers du projet, de les rajouter, de fermer VS et de le redémarrer, et même de redémarrer mon ordinateur, mais aucun d'entre eux n'a fonctionné.

70
zohair

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

43
CMS

Je sais que c'est une vieille question, mais j'avais un problème similaire et je voulais poster ma solution au cas où cela 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 didacticiel 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'obtenais une erreur indiquant que l'identificateur de la valeur de l'ID HTML "n'existe pas dans le contexte actuel".

Pour le résoudre, je devais faire ce qui suit:

1. Exécuter 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 HTML element du fichier aspx:

runat="server"

Certains objets de la boîte à outils de Visual Studio IDE) 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 de concepteur est généré automatiquement.
  • Supprimez le fichier * .aspx.designer.cs existant. Assurez-vous de ne supprimer que le fichier concepteur . Ne supprimez pas l’autre, car il contient le code C # de la page.
  • Cliquez avec le bouton droit sur le fichier aspx parent. Dans le menu contextuel, sélectionnez Convertir en application Web.

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

114
RobotNerd

exclure toute autre page faisant référence au même fichier code-behind, par exemple une page plus ancienne que vous avez copiée et collée.

33
mosheb

J'ai eu le même problème. Il se trouve que j'avais à la fois "MyPage.aspx" et "Copie de MyPage.aspx" dans mon projet.

13
user735232

Assurez-vous également qu'aucun fichier ne tente accidentellement d'hériter ou de définir la même classe (partielle) que les autres fichiers. Notez que ces fichiers peuvent sembler sans rapport avec les fichiers où l'erreur est réellement apparue!

3
Protector one

Je reçois la même erreur après avoir apporté des modifications à mon contexte de données. Mais je rencontre quelque chose que je ne connais pas. Je m'habitue à publier mes fichiers manuellement. Normalement, lorsque je le fais, aucun dossier App_Code n'apparaît dans le dossier de publication. Bu i a commencé à utiliser la publication VS 12, qui publie directement avec votre aide sur le serveur Web. Et puis j'obtiens l'erreur d'être une application précompilée. Puis je supprime le dossier app_code cela a fonctionné. Mais cela m’a donné l’erreur de contexte de données que vous obtenez. Je viens donc de supprimer tous les fichiers et de relancer la publication sans restrictions de fichiers (chaque dossier et fichier sera publié), puis cela a fonctionné comme un charme.

1
Coderx07

J'ai rencontré cette même erreur, sauf qu'il s'agissait d'une erreur WPF. J'étais en train de réorganiser des projets et j'avais un contrôle défini comme suit:

<local:CustomControl Name="Custom" /> 

Dans mon code, j'ai essayé d'utiliser Custom.Blah, mais j'ai eu l'erreur:

The name 'Custom' does not exist in the current context

Qu'est-ce que le truc pour moi était de changer mon contrôle dans Xaml en ceci:

<local:CustomControl x:Name="Custom" />

J'espère que cela aide quelqu'un là-bas!

1
Ashley Grenon

J'ai eu le même problème, mon problème était de ne pas avoir d'espace entre deux attributs "

AutoGenerateColumns="False"DataKeyNames="ProductID"

au lieu de

AutoGenerateColumns="False" DataKeyNames="ProductID"
1
PersyJack

cette erreur se produit souvent lorsque vous ratez runat="server".

1
Bashir ahmad

J'ai résolu ce problème dans mon projet en sauvegardant les fichiers actuels (il me restait donc mon code), en supprimant l'aspx actuel (et les pages enfants), en en créant un nouveau et en copiant le contenu des fichiers de sauvegarde dans les nouveaux fichiers.

1
J. Polfer

J'avais le même problème depuis que je cherchais à produire à nouveau le fichier aspx à partir d'un projet Visual Studio 2010, de sorte que les contrôles possédaient la propriété clientidmode = "Static". Lorsque cela est supprimé, il a été résolu.

0
Desmond

L'option n ° 2 proposée ci-dessus fonctionne pour les applications Windows Form et non pour les applications Web aspx. Une erreur similaire s'est produite dans une application Web. J'ai résolu ce problème en supprimant un fichier dans lequel j'avais un contrôle utilisateur du même nom. Ce fichier aspx était en fait un fichier de sauvegarde et n'était référencé nulle part dans le processus. le nom du contrôle utilisateur enregistré dans le fichier de sauvegarde a été nommé exactement de la même manière dans le fichier aspx qui a été référencé dans le flux de processus. J'ai donc supprimé le fichier de sauvegarde et la solution générée, build réussie.

J'espère que cela aidera quelqu'un dans un scénario similaire.

Vijaya Laxmi.

0
user1661290

J'ai eu un problème similaire lorsque j'ai peaufiné avec un répéteur après l'avoir converti à partir d'une liste de données.

Le problème était que j'ai accidentellement uni 2 attributs lors de la suppression d'un attribut inutile.

<asp:Repeater runat="server" ID="ClientsRP"DataSourceID="ClientsDS">
    .
    .
    .
</asp:Repeater>

Et cela a empêché la génération du répéteur dans le fichier de conception.

0

Dans mon cas, lorsque j'ai créé le formulaire Web, il était nommé WebForm1.aspx et ses noms respectifs (WebForm1). Lettre, j'ai renommé cela en quelque chose d'autre. J'ai renommé manuellement presque tous les emplacements, mais un emplacement du fichier de concepteur le montrait toujours sous le nom "WebForm1".

J'ai aussi changé cela et je me suis débarrassé de cette erreur.

0
Vikram

J'ai rencontré le même problème. Apparemment, vous ne devriez pas appeler une classe de la BLL le même nom que l’un des fichiers .aspx/.aspx.cs. Je pensais qu'ils ne seraient pas dans la même optique, etc., mais cela gênait trop le fonctionnement interne de Visual Studio. Je suis un peu surpris que rien ne vous empêche de faire cela si cela va produire ce type d'erreur. Quoi qu'il en soit, supprimez simplement les fichiers .aspx/.aspx.cs et reconstruisez votre projet. Puis ramenez-les sous un autre nom. Vous pouvez copier/coller votre code dans un autre éditeur si vous ne voulez pas tout retaper.

0
GenericJam

J'ai eu le même message d'erreur. Mon code était sans erreur et fonctionnait parfaitement, puis j'ai décidé de revenir en arrière et de renommer l'un de mes boutons. Soudain, cela me donne une erreur de compilation accompagnée de ce soulignement bleu ondulé qui indique que le contrôle n'existe pas dans le contexte actuel ...

Il s'avère que Visual Studio était stupide, car le problème était lié aux fichiers de sauvegarde de ma classe aspx.cs que j'avais créés. J'ai supprimé ceux-ci et les erreurs sont parties.

0
user1985189

1) Vérifiez la propriété CodeFile dans <% @ Page CodeFile = "nom_fichier.aspx.cs"%> dans la page "nom_fichier.aspx", votre code derrière le nom du fichier et le nom de cette propriété doivent être identiques.

2) vous risquez de manquer runat = "serveur" dans le code

0