Der Name 'Kontrollname' existiert im aktuellen Kontext nicht


79

Ich habe eine Webanwendung, an der ich arbeite (ASP.NET2.0 mit C # unter Verwendung von VS2005). Alles hat gut funktioniert und plötzlich bekomme ich den Fehler:

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

und 43 andere der Art für jedes Mal, wenn ich ein Steuerelement in meinem Code hinter der Seite verwendet habe.

Dies geschieht nur für 1 Seite. Und es ist, als ob der Codebehind die Steuerelemente nicht erkennt. Eine andere interessante Sache ist, dass der Intellisense auch keine der Steuerelemente aufnimmt.

Ich habe versucht, die Lösungsdatei zu bereinigen, die obj-Datei zu löschen, die Dateien aus dem Projekt auszuschließen, sie dann erneut hinzuzufügen, VS zu schließen und neu zu starten und sogar meinen Computer neu zu starten, aber keine davon hat funktioniert.


2
Die richtige Antwort darauf finden Sie in der Antwort hier: stackoverflow.com/a/1981228/168703
JonH

1
Überprüfen Sie auch den Namespace in der Datei designer.cs. Manchmal wird nach dem Umbenennen einer Aspx-Seite die Namesapce einfach aus der Datei designer.cs entfernt.
Ashraf Abusada

Dies kann auftreten, nachdem das Markup für das Steuerelement aus einer anderen ASPX-Datei kopiert wurde. Ich habe das kopierte Markup gelöscht und das Kontroll-Markup manuell geschrieben, und der Fehler ist verschwunden.
Milind Bankar

Antworten:


48

Überprüfen Sie Ihren Code hinter dem Dateinamen und der Inherits-Eigenschaft in der @ Page-Direktive und stellen Sie sicher, dass beide übereinstimmen.


1
Das hat der Trick auch für mich getan! Ein Namespace war falsch und als ich ihn in der @ Page-Direktive korrigierte, verschwanden die Fehler.
Östlich von Nirgendwo

1
Gleiches hier, mit einem kleinen Zusatz: Stellen Sie sicher, dass Sie überprüfen, ob es den vollständig qualifizierten Klassennamen hat. Aus irgendeinem Grund hat VS meine in Inherits = "KioskB" geändert, als es "MyNamespace.KioskB" sein musste. Es sah richtig aus, bis ich das Markup mit einer anderen Seite verglich und feststellte, dass der Namespace-Teil weg war.
Kevin

117

Ich weiß, dass dies eine alte Frage ist, aber ich hatte ein ähnliches Problem und wollte meine Lösung veröffentlichen, falls es jemand anderem zugute kommen könnte. Ich bin auf das Problem gestoßen, als ich gelernt habe, Folgendes zu verwenden:

  • ASP.NET 3.5
  • C #
  • VS2008

Ich habe versucht, eine AJAX-fähige Seite zu erstellen (lesen Sie ein Tutorial zur Verwendung des ScriptManager-Objekts, wenn Sie damit nicht vertraut sind). Ich habe versucht, über den C # -Code auf die HTML-Elemente auf der Seite zuzugreifen, und es wurde eine Fehlermeldung angezeigt, dass der Bezeichner für den HTML-ID-Wert "im aktuellen Kontext nicht vorhanden" ist.

Um es zu lösen, musste ich Folgendes tun:

1. Führen Sie den Server aus

Um auf das HTML-Element als Variable im C # -Code zuzugreifen, muss der folgende Wert in das HTML-Element-Tag in der Aspx-Datei eingefügt werden:

runat="server"

Einige Objekte in der Toolbox in der Visual Studio-IDE enthalten diesen Wert nicht automatisch, wenn sie zur Seite hinzugefügt werden.

2. Generieren Sie die automatisch generierte C # -Datei neu:

  • Im Projektmappen-Explorer sollten sich unter der Aspx-Datei zwei Dateien befinden: * .aspx.cs und * .aspx.designer.cs. Die Designer-Datei wird automatisch generiert.
  • Löschen Sie die vorhandene Datei * .aspx.designer.cs. Stellen Sie sicher, dass Sie nur die Designer- Datei löschen . Löschen Sie den anderen nicht, da er Ihren C # -Code für die Seite enthält.
  • Klicken Sie mit der rechten Maustaste auf die übergeordnete Aspx-Datei. Wählen Sie im Popup-Menü die Option In Webanwendung konvertieren .

Jetzt sollte das Element in der C # -Code-Datei zugänglich sein.


2
Wenn Sie mit der rechten Maustaste auf die Option "In Webanwendung konvertieren" klicken, ist dies auch für Ordner und Projekte verfügbar.
Dana Benson

9
Option Nr. 2 war die perfekte Antwort für mich bei der Lösung dieses Problems, als ich heute darauf stieß!
MikeScott8


1
Das Löschen und Neuerstellen der Designer-Datei hat für mich funktioniert - danke
CJM

3
Dies funktionierte über das Menü Projekt. Hinweis: Das <% @ Page-Tag der ASPX-Datei sollte "Codebehind" und nicht "Codefile" verwenden
KR

34

Schließen Sie alle anderen Seiten aus, die auf dieselbe CodeBehind-Datei verweisen, z. B. eine ältere Seite, die Sie kopiert und eingefügt haben.


oder kopieren Sie das Element 'Label1' auf diese andere Seite.
Mathijsuitmegen

14

Ich hatte das gleiche Problem. Es stellt sich heraus, dass ich sowohl "MyPage.aspx" als auch "Kopie von MyPage.aspx" in meinem Projekt hatte.


3

Stellen Sie außerdem sicher, dass Sie keine Dateien haben, die versehentlich versuchen, dieselbe (Teil-) Klasse wie andere Dateien zu erben oder zu definieren. Beachten Sie, dass diese Dateien möglicherweise nicht mit den Dateien zusammenhängen, in denen der Fehler tatsächlich aufgetreten ist!


1

Ich bin auf denselben Fehler gestoßen, außer dass es sich um einen WPF-Fehler handelte. Ich habe Projekte neu angeordnet und eine Steuerung wie folgt definiert:

<local:CustomControl Name="Custom" /> 

In meinem Code dahinter habe ich versucht, Custom.Blah zu verwenden, aber ich habe den Fehler erhalten:

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

Was für mich der Trick war, war meine Kontrolle in Xaml dahingehend zu ändern:

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

Hoffe das hilft jemandem da draußen!


1

Ich erhalte den gleichen Fehler, nachdem ich Änderungen an meinem Datenkontext vorgenommen habe. Aber ich stoße auf etwas, mit dem ich nicht vertraut bin. Ich gewöhne mich daran, meine Dateien manuell zu veröffentlichen. Wenn ich das tue, wird normalerweise kein App_Code-Ordner im Veröffentlichungsordner angezeigt. Bu i begann mit der Verwendung von VS 12 Publishing, das mit Ihrer Hilfe auf dem Webserver direkt veröffentlicht wird. Und dann bekomme ich den Fehler, eine vorkompilierte Anwendung zu sein. Dann lösche ich den Ordner app_code, der funktioniert hat. Aber dann gab es mir den Datenkontextfehler, den Sie erhalten. Also habe ich einfach alle Dateien gelöscht und die Veröffentlichung ohne Dateibeschränkungen erneut ausgeführt (jeder Ordner und jede Datei wird veröffentlicht), dann hat es wie ein Zauber funktioniert.


1

Ich hatte das gleiche Problem, mein Problem war, keinen Platz zwischen zwei Attributen zu haben. "

AutoGenerateColumns="False"DataKeyNames="ProductID"

anstatt

AutoGenerateColumns="False" DataKeyNames="ProductID"

1

Ich habe dies in meinem Projekt behoben, indem ich die aktuellen Dateien gesichert habe (also hatte ich immer noch meinen Code), den aktuellen Aspx (und die untergeordneten Seiten) gelöscht, einen neuen erstellt und den Inhalt der Sicherungsdateien in die neuen Dateien kopiert habe.



0

Die oben angebotene Lösungsoption Nr. 2 funktioniert für Windows Forms-Anwendungen und nicht für Web-Aspx-Anwendungen. Ich habe einen ähnlichen Fehler in der Webanwendung erhalten. Ich habe diesen Fehler behoben, indem ich eine Datei gelöscht habe, in der ich ein Benutzersteuerelement mit demselben Namen hatte. Diese Aspx-Datei war eigentlich eine Sicherungsdatei und wurde nirgendwo im Prozess referenziert, aber sie hat den Fehler trotzdem verursacht, weil Der Name des in der Sicherungsdatei registrierten Benutzersteuerelements wurde in der Aspx-Datei, auf die im Prozessablauf verwiesen wurde, genau gleich benannt. Also habe ich die Sicherungsdatei gelöscht und die Lösung erstellt, die Erstellung war erfolgreich.

Hoffe das hilft jemandem in einem ähnlichen Szenario.

Vijaya Laxmi.


0

Ich hatte das gleiche Problem, da ich versuchte, die Aspx-Datei aus einem Visual Studio 2010-Projekt neu zu erstellen, sodass die Steuerelemente die Eigenschaft clientidmode = "Static" hatten. Wenn dies entfernt wurde, wurde es behoben.


0

Ich hatte ein ähnliches Problem beim Optimieren mit einem Repeater, nachdem ich ihn aus einer Datenliste konvertiert hatte.

Das Problem war, dass ich beim Löschen eines nicht benötigten Attributs versehentlich zwei Attribute vereint habe.

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

Dies verhinderte die Erzeugung des Repeaters in der Designdatei.


0

Ich hatte die gleiche Fehlermeldung. Mein Code war fehlerfrei und funktionierte einwandfrei. Dann habe ich mich entschlossen, eine meiner Schaltflächen umzubenennen. Plötzlich erhalte ich einen Kompilierungsfehler, begleitet von der blauen, schnörkellosen Unterstreichung, die besagt, dass das Steuerelement im aktuellen Kontext nicht vorhanden ist.

Es stellte sich heraus, dass Visual Studio dumm war, da das Problem mit den Sicherungsdateien zusammenhängt, die ich mit meiner Klasse aspx.cs erstellt hatte. Ich habe diese gelöscht und die Fehler sind verschwunden.


0

Ich bin auf dasselbe Problem gestoßen. Anscheinend sollten Sie eine Klasse in der BLL nicht mit demselben Namen wie eine der .aspx / .aspx.cs-Dateien aufrufen. Ich dachte, sie würden nicht im gleichen Bereich liegen usw., aber es hat die internen Abläufe von Visual Studio zu sehr beeinträchtigt. Ich bin ein bisschen überrascht, dass es nichts gibt, das Sie davon abhält, dies zu tun, wenn es zu dieser Art von Fehler kommt. Löschen Sie einfach die Dateien .aspx / .aspx.cs und erstellen Sie Ihr Projekt neu. Dann bringen Sie sie unter einem anderen Namen zurück. Sie können Ihren Code kopieren / in einen anderen Editor einfügen, wenn Sie nicht alles erneut eingeben möchten.


0

In meinem Fall wurde das Webformular beim Erstellen als WebForm1.aspx und mit den entsprechenden Namen (WebForm1) bezeichnet. Brief, ich habe das in etwas anderes umbenannt. Ich habe an fast allen Stellen manuell umbenannt, aber an einer Stelle in der Designer-Datei wurde sie immer noch als "WebForm1" angezeigt.

Ich habe das auch geändert und diesen Fehler beseitigt.


0

1) Überprüfen Sie die CodeFile-Eigenschaft in <% @ Page CodeFile = "filename.aspx.cs"%> auf der Seite "filename.aspx". Ihr Code hinter dem Dateinamen und dieser Eigenschaftsname sollten identisch sein.

2) Möglicherweise fehlt runat = "server" im Code


0

In meinem Fall musste ich die 417-Fehler "Kontrollname nicht gefunden" durchsuchen, um einen tatsächlichen Fehler zu finden: Ich hatte eine DLL ersetzt, aber die Versionsnummer in der web.config nicht aktualisiert. Das wurde behoben und 3 Minuten später erfolgreich erstellt. Alle anderen Fehler hatten sich von selbst behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.