Nazwa „controlname” nie istnieje w bieżącym kontekście


79

Mam aplikację internetową, nad którą pracuję (ASP.NET2.0 z C #, używając VS2005). Wszystko działało dobrze i nagle pojawia się błąd:

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

i 43 inne tego rodzaju za każdym razem, gdy użyłem kontrolki w moim kodzie za stroną.

Dzieje się to tylko na 1 stronie. I to tak, jakby za kodem nie rozpoznawano elementów sterujących. Inną interesującą rzeczą jest to, że Intellisense również nie przejmuje żadnej kontroli.

Próbowałem wyczyścić plik rozwiązania, usunąć plik obj, wykluczyć pliki z projektu, a następnie ponownie je dodać, zamknąć VS i ponownie uruchomić, a nawet ponownie uruchomić komputer, ale żaden z nich nie zadziałał.


2
Właściwa odpowiedź na to pytanie znajduje się tutaj: stackoverflow.com/a/1981228/168703
JonH,

1
Sprawdź również przestrzeń nazw w designer.cs, czasami po zmianie nazwy strony aspx plik namesapce jest po prostu usuwany z designer.cs.
Ashraf Abusada

Taka sytuacja może wystąpić po skopiowaniu znaczników dla formantu z innego pliku aspx. Usunąłem skopiowany znacznik i ręcznie napisałem znacznik kontrolny, a błąd zniknął.
Milind Bankar

Odpowiedzi:


48

Sprawdź swój kod za nazwą pliku i właściwością Inherits w dyrektywie @Page, upewnij się, że oba są zgodne.


1
Dla mnie to też zadziałało! Przestrzeń nazw była błędna i kiedy poprawiłem ją w dyrektywie @Page, błędy poof zniknęły.
wschód od nikąd

1
To samo tutaj, z małym dodatkiem: Upewnij się, że sprawdzasz, czy ma w pełni kwalifikowaną nazwę klasy. Z jakiegoś powodu VS zmieniło moje na Inherits = "KioskB", kiedy musiało to być "MyNamespace.KioskB". Wyglądało to dobrze, dopóki nie porównałem znaczników z inną stroną i nie zauważyłem, że część dotycząca przestrzeni nazw zniknęła.
Kevin

117

Wiem, że to stare pytanie, ale miałem podobny problem i chciałem opublikować swoje rozwiązanie na wypadek, gdyby przyniosło korzyści komuś innemu. Napotkałem problem podczas nauki obsługi:

  • ASP.NET 3.5
  • DO#
  • VS2008

Próbowałem utworzyć stronę obsługującą AJAX (zajrzyj do samouczka na temat korzystania z obiektu ScriptManager, jeśli nie jesteś z tym zaznajomiony). Próbowałem uzyskać dostęp do elementów HTML na stronie za pomocą kodu C # i otrzymywałem błąd informujący o identyfikatorze wartości identyfikatora HTML „nie istnieje w bieżącym kontekście”.

Aby go rozwiązać, musiałem wykonać następujące czynności:

1. Uruchom na serwerze

Aby uzyskać dostęp do elementu HTML jako zmiennej w kodzie C #, w tagu elementu HTML w pliku aspx należy umieścić następującą wartość:

runat="server"

Niektóre obiekty w przyborniku w środowisku IDE programu Visual Studio nie uwzględniają automatycznie tej wartości po dodaniu do strony.

2. Ponownie wygeneruj automatycznie wygenerowany plik C #:

  • W Eksploratorze rozwiązań w pliku aspx powinny znajdować się dwa pliki: * .aspx.cs i * .aspx.designer.cs. Plik projektanta jest generowany automatycznie.
  • Usuń istniejący plik * .aspx.designer.cs. Upewnij się, że usuwasz tylko plik projektanta . Nie usuwaj drugiego, ponieważ zawiera kod C # strony.
  • Kliknij prawym przyciskiem myszy nadrzędny plik aspx. Z wyskakującego menu wybierz Konwertuj na aplikację internetową .

Teraz element powinien być dostępny w pliku kodu C #.


2
fyi kliknij prawym przyciskiem myszy opcję "Konwertuj na aplikację internetową" jest również dostępna w folderach i projektach.
Dana Benson

9
opcja nr 2 była dla mnie idealną odpowiedzią w rozwiązaniu tego problemu, kiedy właśnie na to wpadłem!
MikeScott8

19
Do Twojej wiadomości w programie Visual Studio 2013, opcja „Konwertuj na aplikację internetową” została przeniesiona do menu Projekt: stackoverflow.com/questions/19561982/ ...
Mark Nugent

1
usunięcie i odtworzenie pliku projektanta zadziałało dla mnie - dzięki
CJM

3
To działało przy użyciu menu Projekt. Uwaga: w tagu <% @ Page w pliku .aspx należy umieścić słowo „Codebehind”, a nie „Codefile”
KR

34

wyklucz wszystkie inne strony, które odwołują się do tego samego pliku związanego z kodem, na przykład starszą stronę, którą skopiowałeś i wkleiłeś.


lub skopiuj element „Label1” na tę inną stronę.
mathijsuitmegen

14

Miałem ten sam problem. Okazuje się, że w swoim projekcie miałem zarówno „MyPage.aspx”, jak i „Copy of MyPage.aspx”.


3

Upewnij się również, że nie masz plików, które przypadkowo próbują dziedziczyć lub definiować tę samą (częściową) klasę co inne pliki. Zauważ, że te pliki mogą wydawać się niezwiązane z plikami, w których pojawił się błąd!


1

Napotkałem ten sam błąd, z wyjątkiem tego, że był to błąd WPF. Przestawiałem projekty i miałem kontrolę zdefiniowaną w ten sposób:

<local:CustomControl Name="Custom" /> 

W moim kodzie próbowałem użyć Custom.Blah, ale otrzymałem błąd:

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

Co mi zrobiło, zmieniło moją kontrolę w Xaml na to:

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

Mam nadzieję, że to komuś pomoże!


1

Ten sam błąd pojawia się po wprowadzeniu zmian w kontekście danych. Ale napotykam coś, czego nie jestem zaznajomiony. Przyzwyczajam się do ręcznego publikowania moich plików. Zwykle, gdy to robię, w folderze publikowania nie pojawia się żaden folder App_Code. Bu zacząłem używać VS 12 publikowania, które bezpośrednio publikuje z twoją pomocą na serwerze WWW. Następnie pojawia się błąd dotyczący prekompilacji aplikacji. Następnie usuwam folder app_code, który zadziałał. Ale wtedy dostałem błąd kontekstu danych, który otrzymujesz. Więc właśnie usunąłem wszystkie pliki i uruchomiłem publikację ponownie bez ograniczeń plików (każdy folder i plik zostanie opublikowany), a potem zadziałało jak urok.


1

Miałem ten sam problem, mój problem polegał na braku odstępu między dwoma atrybutami ”

AutoGenerateColumns="False"DataKeyNames="ProductID"

zamiast

AutoGenerateColumns="False" DataKeyNames="ProductID"

1

Naprawiłem to w moim projekcie, wykonując kopię zapasową bieżących plików (więc nadal miałem swój kod), usuwając bieżący plik aspx (i strony podrzędne), tworząc nowy i kopiując zawartość plików kopii zapasowej do nowych plików.



0

Opcja rozwiązania nr 2 oferowana powyżej działa dla aplikacji Windows Forms, a nie aplikacji web aspx. Wystąpił podobny błąd w aplikacji internetowej, rozwiązałem ten problem, usuwając plik, w którym miałem kontrolę użytkownika o tej samej nazwie, ten plik aspx był w rzeczywistości plikiem kopii zapasowej i nie był nigdzie odwoływany w procesie, ale nadal powodował błąd, ponieważ nazwa kontrolki użytkownika zarejestrowana w pliku kopii zapasowej została nazwana dokładnie tak samo w pliku aspx, do którego odwoływano się w przebiegu procesu. Więc usunąłem plik kopii zapasowej i stworzyłem rozwiązanie, kompilacja się powiodła.

Mam nadzieję, że to pomoże komuś w podobnym scenariuszu.

Vijaya Laxmi.


0

Miałem ten sam problem, ponieważ próbowałem ponownie utworzyć plik aspx z projektu programu Visual Studio 2010, więc kontrolki miały właściwość clientidmode = "Static". Usunięcie tego problemu zostało rozwiązane.


0

Miałem podobny problem podczas dostosowywania Repeatera po przekonwertowaniu go z DataList.

Problem polegał na tym, że przypadkowo połączyłem 2 atrybuty podczas usuwania niepotrzebnego.

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

A to uniemożliwiło wygenerowanie repeatera w pliku projektu.


0

Miałem ten sam komunikat o błędzie. Mój kod był bezbłędny i działał idealnie, potem zdecydowałem się cofnąć i zmienić nazwę jednego z moich przycisków i nagle wyświetla mi się błąd kompilacji, któremu towarzyszy to niebieskie faliste podkreślenie, mówiąc, że formant nie istnieje w obecnym kontekście ...

Okazuje się, że program Visual Studio był głupi, ponieważ problem był związany z plikami kopii zapasowych, które utworzyłem z mojej klasy aspx.cs. Usunąłem je i błędy zniknęły.


0

Napotkałem ten sam problem. Najwyraźniej nie powinieneś nazywać klasy w BLL taką samą nazwą jak jeden z plików .aspx / .aspx.cs. Myślałem, że nie będą w tym samym zakresie itp., Ale za bardzo zepsuło to wewnętrzne działanie programu Visual Studio. Jestem trochę zaskoczony, że nie ma czegoś, co powstrzymuje Cię przed zrobieniem tego, jeśli ma to spowodować tego typu błąd. W każdym razie po prostu usuń pliki .aspx / .aspx.cs i odbuduj projekt. Następnie przynieś je z powrotem pod inną nazwą. Możesz skopiować / wkleić swój kod do innego edytora, jeśli nie chcesz ponownie wpisywać go z powrotem.


0

W moim przypadku, kiedy tworzyłem formularz internetowy, nosił on nazwę WebForm1.aspx i odpowiednie nazwy (WebForm1). List, zmieniłem nazwę na coś innego. Zmieniłem nazwę ręcznie w prawie wszystkich miejscach, ale jedno miejsce w pliku projektanta nadal wyświetlało go jako „WebForm1”.

To też zmieniłem i pozbyłem się tego błędu.


0

1) Sprawdź właściwość CodeFile w <% @ Page CodeFile = "filename.aspx.cs"%> na stronie "filename.aspx", Twój kod za nazwą pliku i nazwa właściwości powinny być takie same.

2) Możesz pominąć runat = "server" w kodzie


0

W moim przypadku musiałem przeszukać błędy 417 „Nie znaleziono kontrolki”, aby znaleźć rzeczywisty błąd: wymieniłem bibliotekę DLL, ale nie zaktualizowałem numeru wersji w pliku web.config. Naprawiono to i zbudowano pomyślnie, 3 minuty później wszystkie inne błędy rozwiązały się same.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.