Имя 'controlname' не существует в текущем контексте

79

У меня есть веб-приложение, над которым я работаю (ASP.NET2.0 с C #, с использованием VS2005). Все работало нормально, и вдруг я получаю ошибку:

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

и еще 43 подобных за каждый раз, когда я использовал элемент управления в своем коде страницы.

Это происходит только для 1 страницы. И как будто программный код не распознает элементы управления. Еще одна интересная вещь заключается в том, что intellisense также не использует какие-либо элементы управления.

Я попытался очистить файл решения, удалить файл obj, исключить файлы из проекта, затем повторно добавить их, закрыть VS и перезапустить его и даже перезагрузить компьютер, но ничего из этого не сработало.

зохер
источник
2
Правильный ответ на этот вопрос находится в ответе, найденном здесь: stackoverflow.com/a/1981228/168703
JonH 03
1
Также проверьте пространство имен в файле designer.cs. Иногда после переименования страницы aspx nameapce просто удаляется из файла designer.cs.
Ашраф Абусада
Это могло произойти после копирования разметки для элемента управления из другого ASPX-файла. Я удалил скопированную разметку и вручную написал контрольную разметку, и ошибка исчезла.
Milind Bankar

Ответы:

48

Проверьте свой код за именем файла и свойством Inherits в директиве @Page, убедитесь, что они оба совпадают.

Кристиан К. Сальвадо
источник
1
Это тоже помогло мне! Пространство имен было неправильным, и когда я исправил его в директиве @Page, ошибки исчезли.
East of Nowhere
1
То же самое и здесь, с небольшим дополнением: убедитесь, что вы проверяете, что у него есть полное имя класса. По какой-то причине VS изменил мой на Inherits = "KioskB", когда он должен был быть "MyNamespace.KioskB". Это выглядело правильно, пока я не сравнил разметку с другой страницей и не заметил, что часть пространства имен пропала.
Кевин
117

Я знаю, что это старый вопрос, но у меня была аналогичная проблема, и я хотел опубликовать свое решение на случай, если оно может помочь кому-то другому. Я столкнулся с проблемой, когда учился использовать:

  • ASP.NET 3.5
  • C #
  • VS2008

Я пытался создать страницу с поддержкой AJAX (прочтите руководство по использованию объекта ScriptManager, если вы не знакомы с этим). Я попытался получить доступ к HTML-элементам на странице через код C #, и я получил сообщение об ошибке, в котором указывалось, что идентификатор для значения HTML ID «не существует в текущем контексте».

Чтобы решить эту проблему, мне пришлось сделать следующее:

1. Запуск на сервере

Чтобы получить доступ к элементу HTML как к переменной в коде C #, в тег элемента HTML в файле aspx необходимо поместить следующее значение:

runat="server"

Некоторые объекты на панели инструментов в Visual Studio IDE не включают это значение автоматически при добавлении на страницу.

2. Восстановите автоматически созданный файл C #:

  • В обозревателе решений под файлом aspx должны быть два файла: * .aspx.cs и * .aspx.designer.cs. Файл дизайнера создается автоматически.
  • Удалите существующий файл * .aspx.designer.cs. Убедитесь, что вы удалили только файл дизайнера . Не удаляйте другой, потому что он содержит ваш код C # для страницы.
  • Щелкните правой кнопкой мыши родительский файл aspx. Во всплывающем меню выберите « Преобразовать в веб-приложение» .

Теперь элемент должен быть доступен в файле кода C #.

RobotNerd
источник
2
fyi, щелчок правой кнопкой мыши по опции «Преобразовать в веб-приложение» также доступен для папок и проектов.
Дана Бенсон
9
вариант №2 был для меня идеальным ответом в решении этой проблемы, когда я столкнулся с ней сегодня!
MikeScott 8
19
К вашему сведению, в Visual Studio 2013 параметр «Преобразовать в веб-приложение» перемещен в меню «Проект»: stackoverflow.com/questions/19561982/…
Марк Ньюджент,
1
удаление и воссоздание файла дизайнера сработало для меня - спасибо
CJM
3
Это работало с использованием меню «Проект». Примечание: тег <% @ Page в файле .aspx должен использовать «Codebehind», а не «Codefile»
KR
34

исключите любые другие страницы, которые ссылаются на тот же файл кода программной части, например более старую страницу, которую вы скопировали и вставили.

мошеб
источник
или скопируйте элемент Label1 на другую страницу.
mathijsuitmegen
14

У меня такая же проблема. Оказалось, что в моем проекте были и MyPage.aspx, и Copy of MyPage.aspx.

user735232
источник
3

Также убедитесь, что у вас нет файлов, которые случайно пытаются наследовать или определять тот же (частичный) класс, что и другие файлы. Обратите внимание, что эти файлы могут показаться не связанными с файлами, в которых действительно возникла ошибка!

Защитник один
источник
1

Я столкнулся с той же ошибкой, за исключением того, что это была ошибка WPF. Я переставлял проекты и определил элемент управления следующим образом:

<local:CustomControl Name="Custom" /> 

В своем коде я попытался использовать Custom.Blah, но получил ошибку:

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

Какая уловка для меня заключалась в изменении моего контроля в Xaml на это:

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

Надеюсь, это кому-то поможет!

Эшли Гренон
источник
1

Я получаю ту же ошибку после того, как внес изменения в контекст данных. Но я сталкиваюсь с чем-то незнакомым. Я привык публиковать свои файлы вручную. Обычно, когда я это делаю, в папке публикации не появляется папка App_Code. Но я начал использовать публикацию VS 12, которая напрямую публикуется с вашей помощью на веб-сервере. И затем я получаю сообщение об ошибке о том, что приложение предварительно скомпилировано. Затем я удаляю папку app_code, она сработала. Но затем это дало мне ошибку контекста данных, которую вы получаете. Итак, я просто удалил все файлы и снова запустил публикацию без ограничений для файлов (каждая папка и файл будут опубликованы), тогда это сработало как шарм.

Coderx07
источник
1

У меня была такая же проблема, моя проблема заключалась в отсутствии пробела между двумя атрибутами "

AutoGenerateColumns="False"DataKeyNames="ProductID"

вместо

AutoGenerateColumns="False" DataKeyNames="ProductID"
ПерсиДжек
источник
1

Я исправил это в своем проекте, сделав резервную копию текущих файлов (так что у меня все еще был код), удалив текущий aspx (и дочерние страницы), создав новый и скопировав содержимое файлов резервных копий в новые файлы.

Дж. Польфер
источник
1

эта ошибка часто возникает, когда вы промахиваетесь runat="server".

Башир Ахмад
источник
0

Вариант решения № 2, предложенный выше, работает для приложений Windows Forms, а не для веб-приложения aspx. У меня была аналогичная ошибка в веб-приложении, я решил ее, удалив файл, в котором у меня был пользовательский элемент управления с тем же именем, этот файл aspx на самом деле был файлом резервной копии и нигде в процессе не упоминался, но все же он вызвал ошибку, потому что имя пользовательского элемента управления, зарегистрированное в файле резервной копии, было точно таким же, как и в файле aspx, на который была сделана ссылка в потоке процесса. Итак, я удалил файл резервной копии и построил решение, сборка прошла успешно.

Надеюсь, это поможет кому-то в подобном сценарии.

Виджая Лакшми.

user1661290
источник
0

У меня была такая же проблема, так как я пытался воспроизвести файл aspx из проекта Visual Studio 2010, поэтому элементы управления имели свойство clientidmode = "Static". Когда это было удалено, это было решено.

Десмонд
источник
0

У меня была аналогичная проблема при настройке с помощью Repeater после преобразования его из DataList.

Проблема заключалась в том, что я случайно объединил 2 атрибута при удалении ненужного.

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

И это предотвратило создание репитера в файле проекта.

Рэзван Флавиус Панда
источник
0

У меня было такое же сообщение об ошибке. В моем коде не было ошибок и он работал отлично, затем я решил вернуться и переименовать одну из моих кнопок, и внезапно он выдает ошибку компиляции, сопровождаемую синим волнистым подчеркиванием, говорящим о том, что элемент управления не существует в текущем контексте ...

Оказалось, что Visual Studio была тупой, поскольку проблема была связана с файлами резервных копий, которые я сделал из моего класса aspx.cs. Я удалил их, и ошибки исчезли.

user1985189
источник
0

Я столкнулся с этой же проблемой. Очевидно, вам не следует называть класс в BLL тем же именем, что и у одного из файлов .aspx / .aspx.cs. Я думал, что они не будут в той же области и т. Д., Но это слишком сильно испортило внутреннюю работу Visual Studio. Я немного удивлен, что нет ничего, что могло бы помешать вам сделать это, если это приведет к возникновению такой ошибки. В любом случае просто удалите файлы .aspx / .aspx.cs и перестройте свой проект. Затем верните их под другим именем. Вы можете скопировать / вставить свой код в другой редактор, если не хотите вводить его заново.

GenericJam
источник
0

В моем случае, когда я создавал веб-форму, она называлась WebForm1.aspx и соответствующими именами (WebForm1). Письмо, я переименовал это во что-то другое. Я переименовал вручную почти все места, но одно место в файле дизайнера все еще отображало его как «WebForm1».

Я тоже изменил это и избавился от этой ошибки.

Викрам
источник
0

1) Проверьте свойство CodeFile на <% @ Page CodeFile = "filename.aspx.cs"%> на странице "filename.aspx", ваш код за именем файла и это имя свойства должны совпадать.

2) вы можете пропустить runat = "server" в коде

Boopathi.Indotnet
источник
0

В моем случае мне пришлось перебрать 417 ошибок «controlname not found», чтобы найти настоящую ошибку: я заменил DLL, но не обновил номер версии в web.config. Исправлено и построено успешно, через 3 минуты после этого все остальные ошибки разрешились сами собой.

jgraff
источник