Ім'я '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

1
Також перевірте простір імен у дизайнері .cs, іноді після перейменування сторінки aspx ім'я просто видаляється з дизайнера.
Ашраф Абусада,

Це може статися після копіювання розмітки для елемента керування з іншого файлу .aspx. Я видалив скопійовану розмітку і вручну написав контрольну розмітку, а помилки зникли.
Milind Bankar

Відповіді:


48

Перевірте свій код, що стоїть за назвою файлу та властивістю «Спадщина» за директивою @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"

Деякі об’єкти в Панелі інструментів у середовищі IDE Visual Studio не включають автоматично це значення при додаванні на сторінку.

2. Відновіть автоматично згенерований файл C #:

  • У Провіднику рішень під файлом aspx має бути два файли: * .aspx.cs та * .aspx.designer.cs. Файл дизайнера створюється автоматично.
  • Видаліть наявний файл * .aspx.designer.cs. Обов’язково видаліть лише дизайнер файл . Не видаляйте інший, оскільки він містить ваш код C # для сторінки.
  • Клацніть правою кнопкою миші батьківський файл aspx. У спливаючому меню виберіть Конвертувати у веб-програму .

Тепер елемент повинен бути доступний у файлі коду C #.


2
fyi правою кнопкою миші параметр "Перетворити на веб-програму" також доступний для папок та проектів.
Дана Бенсон,

9
варіант №2 був ідеальною відповіддю для мене при вирішенні цього питання, коли я стикався з ним сьогодні!
MikeScott8,

19
FYI у Visual Studio 2013, параметр «Перетворити на веб-додаток» перемістився до меню Проект: stackoverflow.com/questions/19561982/…
Марк Наджент

1
видалення та відтворення файлу дизайнера спрацювало для мене - дякую
CJM

3
Це працювало за допомогою меню Проект. Примітка: тег <% @ Page у файлі .aspx повинен використовувати «Codebehind», а не «Codefile»
KR

34

виключити будь-які інші сторінки, що посилаються на той самий файл із кодом, наприклад стару сторінку, яку ви скопіювали та вставили.


або скопіюйте елемент 'Label1' на іншу сторінку.
mathijsuitmegen

14

У мене була та сама проблема. Виявляється, у моєму проекті були і "MyPage.aspx", і "Копія MyPage.aspx".


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, яка працювала. Але потім це дало мені помилку контексту даних, яку ви отримуєте. Тож я просто видалив усі файли і знову запустив публікацію без обмежень щодо файлів (кожна папка та файл будуть опубліковані), тоді це спрацювало як шарм.


1

У мене була та ж проблема, моя проблема полягала в відсутності пробілу між двома атрибутами "

AutoGenerateColumns="False"DataKeyNames="ProductID"

замість

AutoGenerateColumns="False" DataKeyNames="ProductID"

1

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



0

Варіант рішення №2, запропонований вище, працює для додатків у формах Windows, а не для веб-додатків aspx. Я отримав подібну помилку у веб-застосунку, я вирішив це, видаливши файл, де у мене був користувацький елемент керування з тим самим іменем; цей файл aspx насправді був файлом резервної копії і ніде в процесі не посилався, але все-таки це спричинило помилку, оскільки ім'я керування користувачем, зареєстроване у файлі резервної копії, було точно так само названо у файлі aspx, на який було посилання у процесі обробки. Тож я видалив файл резервної копії та побудував рішення, збірка вдалася.

Сподіваюся, це допоможе комусь із подібного сценарію.

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


0

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


0

У мене була подібна проблема під час налаштування ретранслятора після перетворення його зі списку даних.

Проблема полягала в тому, що я випадково об’єднав 2 атрибути при видаленні непотрібного.

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

І це перешкоджало генерації повторювача у проектному файлі.


0

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

Виявляється, Visual Studio була німою, оскільки проблема пов’язана з файлами резервних копій, які я створив із мого класу aspx.cs. Я їх видалив, і помилки зникли.


0

Я зіткнувся з цим самим питанням. Мабуть, не слід називати клас у BLL з тим самим іменем, що й один із файлів .aspx / .aspx.cs. Я думав, що вони не будуть в тому ж обсязі тощо, але це занадто переплутало внутрішню роботу Visual Studio. Я трохи здивований, що нічого не заважає вам робити це, якщо це призведе до помилок такого типу. У будь-якому випадку, просто видаліть файли .aspx / .aspx.cs і відновіть свій проект. Потім поверніть їх під іншим ім’ям. Ви можете скопіювати / вставити свій код в інший редактор, якщо ви не хочете переписати все назад.


0

У моєму випадку, коли я створював веб-форму, її називали WebForm1.aspx та відповідними іменами (WebForm1). Лист, я перейменував це на щось інше. Я перейменований вручну майже у всіх місцях, але одне місце у файлі дизайнера все ще відображало його як "WebForm1".

Я теж це змінив і позбувся цієї помилки.


0

1) Перевірте властивість CodeFile в <% @ Page CodeFile = "filename.aspx.cs"%> на сторінці "filename.aspx", ваш код, що стоїть за назвою файлу та назвою цього властивості, повинен бути однаковим.

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


0

У моєму випадку мені довелося шукати помилки 417 "ім'я контролю не знайдено", щоб знайти справжню помилку: я замінив DLL, але не оновив номер версії в web.config. Виправлено і успішно побудовано, через 3 хвилини всі інші помилки вирішились самі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.