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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

  • ASP.NET 3.5
  • С#
  • VS2008

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

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

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

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

runat="server"

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

2. Восстановите автоматически сгенерированный файл С#:

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

<local:CustomControl Name="Custom" /> 

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

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

Какая уловка для меня изменила мой контроль в Xaml:

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

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

Ответ 7

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

Ответ 8

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

AutoGenerateColumns="False"DataKeyNames="ProductID"

вместо

AutoGenerateColumns="False" DataKeyNames="ProductID"

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

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

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

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

И это помешало генерации репитера в файле дизайна.

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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