2009-08-22 6 views
18

he el siguiente código en mi página aspx:No se puede acceder ID de control en el código detrás

<asp:Button runat="server" ID="myButton" Text="hello" /> 

y esto en mi código detrás:

protected void Page_Load(object sender, EventArgs e) 
{ 
    myButton.Text = "bye"; 
} 

Por alguna razón el IntelliSense recoge la identificación "myButton" en el código detrás pero cuando compila dice

¡no puede compilar porque no lo reconoce!

Mi página es una página aspx predeterminada que utiliza una página maestra, el botón está dentro de un control de contenido y todo está configurado para ejecutarse correctamente en el servidor, la página se ejecuta y muestra bien excepto este problema de resolución de botón!

¿Alguna idea?

+0

¿Puede pegar más del código de marcado para que podamos ver el contexto del botón? –

Respuesta

28

Parece que su archivo de diseñador (PageName.designer.cs) se ha estropeado un poco. Trataría de eliminar el botón de su página y agregarlo de nuevo.

+16

Para aclarar: elimine el archivo .designer.cs y luego haga clic con el botón derecho en el archivo .aspx y seleccione "Convertir a aplicación web". –

+0

gracias, ¡parecía como si la página por defecto en la que estaba trabajando ni siquiera tuviera un diseñador! Lo borré todo y lo recreé desde el principio. –

+1

Descubrí que esto ocurre cuando ejecuta un servidor de depuración mientras guarda los cambios en .aspx, por lo que no puede modificar el archivo del diseñador. Solo agrego y luego elimino un espacio del archivo .aspx después de cerrar la depuración para solucionarlo. – Jono

8

Si el botón está dentro de un contenedor de nombres como un repetidor, no podrá usarlo así. En su lugar, debe hacer algo como esto:

Button myButton = (Button)Container.FindControl("myButton"); 
myButton.Text = "bye"; 
1

Me he encontrado con este problema varias veces. A veces, los nombres de clase en el diseñador y el código detrás no coinciden. Otras veces es el espacio de nombres que no coincide. Otras veces, la página del diseñador no obtiene la variable miembro generada.

Como se mencionó anteriormente, la regeneración del archivo del diseñador muy bien puede solucionar el problema. Solo asegúrate de guardar primero la página aspx.

2

Me enfrenté al problema y noté que los archivos Designer.cs se excluyeron de mi proyecto.
intente buscarlos para incluirlos nuevamente en su proyecto.
buena suerte

1

Asegúrate de no tener archivos que accidentalmente intenten heredar o definir la misma clase (parcial). ¡Estos archivos pueden no estar relacionados con el lugar donde apareció realmente el error!

3

Me he encontrado con el mismo problema, primero estaba tratando de averiguar qué estaba mal con mi archivo designer.cs. Pero después me di cuenta de que para mi marcado de WebForm estaba usando un copiar/pegar desde el formulario web predeterminado. Así que el problema era, como protector de uno dijo estar seguro de que comprueba la propiedad hereda de @Page:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %> 
2

sé que problema se resuelve, pero cuando tuve un problema similar, cuando tengo convertir WebAplication De C# para VB: lo resolví añadiendo Namespace X/End Namespace

3

Encontré una solución simple para este caso.

Simplemente abra el archivo del diseñador y agregue una línea que corresponda a su control de la interfaz de usuario.

protected global::System.Web.UI.WebControls.Button myButton; 

Dónde myButton es Id de su control.

+1

Siempre escuché que no deberíamos modificar manualmente el archivo del diseñador porque el IDE puede anular los cambios que realice. – joshmcode

+0

@joshmcode Sin riesgo en absoluto. Solo inténtalo. –

+0

¡Lo intentaré! Gracias – joshmcode

1

Ha pasado mucho tiempo. Pero hoy me enfrentaba al mismo problema, por lo que parece que nunca es demasiado tarde. Para mí estaba sucediendo porque el TextBox estaba dentro de un formulario no identificado. Luego establecí una identificación en el formulario y pude acceder al TextBox de la siguiente manera: idForm.idTextBox.ToString(). Supongo que va a pasar lo mismo con un button.

1

Problema es que es posible que tenga varios archivos aspx con codefile en la página directiva que apunta al mismo archivo codebehind. Se espera que exista el mismo control en todos los archivos aspx vinculados con el mismo código y generando un error de compilación.

2

que tenían el mismo problema hoy en día y en mi caso la solución fue:

  • Ir a: C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • eliminar la carpeta Temporary ASP.NET Files.
0

Compruebe el espacio de nombres en los tres archivos. A veces hay una discrepancia entre el nombre del espacio de nombres en el archivo designer.cs y los otros dos archivos. Asegúrese de verificar que el nombre coincida con el nombre del espacio en los tres archivos

Cuestiones relacionadas