c# - No se puede acceder a la ID de control en el código detrás
asp.net user-controls (12)
Tengo el siguiente código en mi página aspx:
<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 toma la identificación "myButton" en el código de atrás pero cuando compila dice
no puede construir 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 se muestra bien excepto por este problema de resolución de botón.
¿Algunas ideas?
Me he encontrado con este problema algunas 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 mencionamos anteriormente, la regeneración del archivo de diseñador puede solucionar el problema. Solo asegúrate de guardar primero la página aspx.
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.
Si el botón está dentro de un contenedor de nombres como un repetidor, no podrás usarlo así. En cambio, debes hacer algo como esto:
Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
Enfrenté el problema y noté que los archivos Designer.cs
se excluyeron de mi proyecto.
intente buscarlos para incluirlos nuevamente en su proyecto.
buena suerte
Asegúrese 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!
Me he encontrado con el mismo problema, primero estaba tratando de descubrir 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. Entonces, el problema era que, como dijo Protector uno, asegúrate de verificar la propiedad heredada de @Page:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
Sé que el problema está resuelto, pero cuando tuve un problema similar, cuando he convertido WebAplication de c # a VB, lo resolví agregando Namespace X / End Namespace
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;
Donde myButton es Id
de su control.
Ha sido un largo 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 una forma no nombrada. Luego establecí un id para el formulario y pude acceder al TextBox
siguiente manera: idForm.idTextBox.ToString()
. Supongo que sucederá lo mismo con un button
.
El problema es que es posible que tenga varios archivos aspx con archivos de código en la directiva de la página con el mismo archivo de código subyacente. Espera que exista el mismo control en todos los archivos aspx vinculados con el mismo código y generando un error de compilación.
Tuve el mismo problema hoy y en mi caso la solución fue:
- Vaya a:
C:/Users/lenovo/AppData/Local/Temp/Temporary ASP.NET Files/
- Elimine la carpeta
Temporary ASP.NET Files
.
Verifique 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 del espacio nombre coincida en los tres archivos