El nombre 'controlname' no existe en el contexto actual

79

Tengo una aplicación web en la que estoy trabajando (ASP.NET2.0 con C #, usando VS2005). Todo funcionaba bien y, de repente, aparece el error:

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

y otros 43 del tipo por cada vez que usé un control en mi código subyacente de la página.

Esto solo ocurre en 1 página. Y es como si el código subyacente no reconociera los controles. Otra cosa interesante es que el intellisense tampoco está recogiendo ninguno de los controles.

Intenté limpiar el archivo de la solución, eliminar el archivo obj, excluir los archivos del proyecto y luego volver a agregarlos, cerrar VS y reiniciarlo, e incluso reiniciar mi computadora, pero ninguno de estos ha funcionado.

zohair
fuente
2
La respuesta correcta a esto está en la respuesta que se encuentra aquí: stackoverflow.com/a/1981228/168703
JonH
1
También verifique el espacio de nombres en el designer.cs a veces, después de cambiar el nombre de una página aspx, el espacio de nombres simplemente se elimina de designer.cs.
Ashraf Abusada
Esto puede ocurrir después de copiar el marcado para el control desde otro archivo .aspx. Eliminé el marcado copiado y escribí manualmente el marcado de control y el error desapareció.
Milind Bankar

Respuestas:

48

Verifique su código detrás del nombre de archivo y la propiedad Inherits en la directiva @Page, asegúrese de que ambos coincidan.

Christian C. Salvadó
fuente
1
¡Eso también funcionó para mí! Un espacio de nombres estaba mal y cuando lo corrigí en la directiva @Page, los errores desaparecieron.
East of Nowhere
1
Lo mismo aquí, con una pequeña adición: asegúrese de verificar que tenga el nombre de la clase completamente calificado. Por alguna razón, VS cambió el mío a Inherits = "KioskB" cuando necesitaba ser "MyNamespace.KioskB". Se veía bien hasta que comparé el marcado con otra de las páginas y noté que la parte del espacio de nombres había desaparecido.
Kevin
117

Sé que esta es una pregunta antigua, pero tenía un problema similar y quería publicar mi solución en caso de que pudiera beneficiar a otra persona. Encontré el problema mientras aprendía a usar:

  • ASP.NET 3.5
  • C#
  • VS2008

Estaba intentando crear una página habilitada para AJAX (consulte un tutorial sobre el uso del objeto ScriptManager si no está familiarizado con esto). Intenté acceder a los elementos HTML en la página a través del código C # y recibí un error que indicaba que el identificador del valor de ID HTML "no existe en el contexto actual".

Para solucionarlo, tuve que hacer lo siguiente:

1. Ejecutar en el servidor

Para acceder al elemento HTML como una variable en el código C #, se debe colocar el siguiente valor en la etiqueta del elemento HTML en el archivo aspx:

runat="server"

Algunos objetos en el Cuadro de herramientas en el IDE de Visual Studio no incluyen automáticamente este valor cuando se agregan a la página.

2. Regenere el archivo C # generado automáticamente:

  • En el Explorador de soluciones, debajo del archivo aspx debe haber dos archivos: * .aspx.cs y * .aspx.designer.cs. El archivo del diseñador se genera automáticamente.
  • Elimine el archivo * .aspx.designer.cs existente. Asegúrese de eliminar solo el archivo del diseñador . No elimine el otro, porque contiene su código C # para la página.
  • Haga clic derecho en el archivo aspx principal. En el menú emergente, seleccione Convertir a aplicación web .

Ahora el elemento debería estar accesible en el archivo de código C #.

RobotNerd
fuente
2
Para su información, la opción de clic derecho "Convertir a aplicación web" también está disponible en carpetas y proyectos.
Dana Benson
9
¡La opción número 2 fue la respuesta perfecta para mí para resolver este problema cuando me lo encontré hoy!
MikeScott8
19
FYI en Visual Studio 2013, la opción "Convertir a aplicación web" se ha movido al menú Proyecto: stackoverflow.com/questions/19561982/…
Mark Nugent
1
eliminar y recrear el archivo del diseñador funcionó para mí - gracias
CJM
3
Esto funcionó usando el menú Proyecto. Nota: la etiqueta <% @ Page del archivo .aspx debe usar 'Codebehind' no 'Codefile'
KR
34

excluya cualquier otra página que haga referencia al mismo archivo de código subyacente, por ejemplo, una página anterior que copió y pegó.

Mosheb
fuente
o copie el elemento 'Label1' en esa otra página.
mathijsuitmegen
14

Yo tuve el mismo problema. Resulta que tenía "MyPage.aspx" y "Copia de MyPage.aspx" en mi proyecto.

usuario735232
fuente
3

Además, asegúrese de no tener archivos que accidentalmente intenten heredar o definir la misma clase (parcial) que otros archivos. Tenga en cuenta que estos archivos pueden parecer no estar relacionados con los archivos donde realmente apareció el error.

Protector uno
fuente
1

Me encontré con este mismo error, excepto que fue un error de WPF. Estaba reorganizando proyectos y tenía un control definido de esta manera:

<local:CustomControl Name="Custom" /> 

En mi código detrás intenté usar Custom.Blah, pero recibí el error:

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

¿Cuál fue el truco para mí fue cambiar mi control en Xaml a esto:

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

¡Espero que esto ayude a alguien!

Ashley Grenon
fuente
1

Recibo el mismo error después de realizar cambios con mi contexto de datos. Pero encuentro algo con lo que no estoy familiarizado. Me acostumbro a publicar mis archivos manualmente. Normalmente, cuando hago eso, no aparece ninguna carpeta App_Code en la carpeta de publicación. Empecé a utilizar la publicación VS 12, que publica directamente con su ayuda en el servidor web. Y luego aparece el error de ser una aplicación precompilada. Luego elimino la carpeta app_code que funcionó. Pero luego me dio el error de contexto de datos que está recibiendo. Así que simplemente eliminé todos los archivos y ejecuté la publicación nuevamente sin restricciones de archivo (se publicarán todas las carpetas y archivos) y funcionó como un encanto.

Coderx07
fuente
1

Tuve el mismo problema, mi problema fue no tener espacio entre dos atributos "

AutoGenerateColumns="False"DataKeyNames="ProductID"

en vez de

AutoGenerateColumns="False" DataKeyNames="ProductID"
PersyJack
fuente
1

Arreglé esto en mi proyecto haciendo una copia de seguridad de los archivos actuales (por lo que todavía tenía mi código), eliminando el aspx actual (y las páginas secundarias), creando uno nuevo y copiando el contenido de los archivos de copia de seguridad en los nuevos archivos.

J. Polfer
fuente
1

este error suele ocurrir cuando falla runat="server".

Bashir ahmad
fuente
0

La opción de solución n. ° 2 ofrecida anteriormente funciona para aplicaciones de formularios de Windows y no para aplicaciones web aspx. Obtuve un error similar en la aplicación web, lo resolví eliminando un archivo donde tenía un control de usuario con el mismo nombre, este archivo aspx era en realidad un archivo de respaldo y no se hacía referencia en ninguna parte del proceso, pero aún así causó el error porque el nombre del control de usuario registrado en el archivo de respaldo se nombró exactamente igual en el archivo aspx al que se hizo referencia en el flujo del proceso. Así que eliminé el archivo de respaldo y construí la solución, la construcción tuvo éxito.

Espero que esto ayude a alguien en un escenario similar.

Vijaya Laxmi.

user1661290
fuente
0

Tuve el mismo problema ya que estaba tratando de reproducir el archivo aspx de un proyecto de Visual Studio 2010, por lo que los controles tenían la propiedad clientidmode = "Static". Cuando esto se eliminó, se resolvió.

Desmond
fuente
0

Tuve un problema similar al ajustar con un repetidor después de convertirlo de un DataList.

El problema fue que uní accidentalmente 2 atributos al eliminar uno innecesario.

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

Y esto impidió la generación del repetidor en el archivo de diseño.

Panda Răzvan Flavius
fuente
0

Tuve el mismo mensaje de error. Mi código estaba libre de errores y funcionaba a la perfección, luego decidí volver atrás y cambiar el nombre de uno de mis botones y de repente me está dando un error de compilación acompañado de ese subrayado ondulado azul que dice que el control no existe en el contexto actual ...

Resulta que Visual Studio estaba siendo tonto, ya que el problema estaba relacionado con los archivos de respaldo que había hecho de mi clase aspx.cs. Los borré y los errores desaparecieron.

user1985189
fuente
0

Me encontré con este mismo problema. Aparentemente, no debería llamar a una clase en el BLL con el mismo nombre que uno de los archivos .aspx / .aspx.cs. Pensé que no estarían en el mismo ámbito, etc. pero se metió demasiado con el funcionamiento interno de Visual Studio. Estoy un poco sorprendido de que no haya algo que le impida hacer esto si va a producir ese tipo de error. De todos modos, simplemente elimine los archivos .aspx / .aspx.cs y reconstruya su proyecto. Luego tráelos de vuelta con otro nombre. Puede copiar / pegar su código en otro editor si no desea volver a escribirlo todo.

GenericJam
fuente
0

En mi caso, cuando creé el formulario web, se lo nombró WebForm1.aspx y sus respectivos nombres (WebForm1). Carta, le cambié el nombre a otra cosa. Cambié el nombre manualmente en casi todos los lugares, pero un lugar en el archivo del diseñador todavía lo mostraba como 'WebForm1'.

También cambié eso y me deshice de este error.

Vikram
fuente
0

1) Verifique la propiedad CodeFile en <% @ Page CodeFile = "filename.aspx.cs"%> en la página "filename.aspx", su código detrás del nombre del archivo y este nombre de propiedad debe ser el mismo.

2) puede perder runat = "server" en el código

Boopathi.Indotnet
fuente
0

En mi caso, tuve que buscar entre los errores 417 "controlname not found" para encontrar un error real: había reemplazado una DLL pero no había actualizado el número de versión en web.config. Se arregló y construyó con éxito, 3 minutos después de que todos los demás errores se resolvieron por sí mismos.

jgraff
fuente