none
¿No se puede invocar controles en metodos estaticos? RRS feed

  • Pregunta

  • Estoy haciendo una practica con Ajax para acceder métodos, porque mas adeltante tendre que llenar un formulario con los datos que Ajax me envía, pero el id de mis controladores aparecen en rojo, ¿por que ocurre esto? "se requiere una referencia de objeto para el campo"

    protected void Page_Load(object sender, EventArgs e)
       {
           
       }
    
        [WebMethod]
        public static void listaAlumnos(string nombre, string apellido)
        {
            txtnombre.Text = nombre;
            txtapellido.Text = apellido;
        }


    lunes, 27 de abril de 2020 16:18

Respuestas

  • ¿No se puede invocar controles en metodos estaticos?

    No solo no se pueden invocar controles, sino que no se puede invocar ninguna otra cosa que no sea estática. Cualquier dato de instancia no se puede invocar desde un método estático.

    Y si lo piensas bien, tiene mucho sentido: el método estático es único, pero las instancias son muchas. ¿Cuál de las instancias es la que debería ser accedida desde el método estático?

    En el caso de los controles, imagínate que tienes a mil usuarios conectados a tu web, cada uno de ellos con su propia instancia de txtnombre y txtapellido. Cuando accedes a estas variables desde el método estático, ¿de cuál de esos mil usuarios se debería tomar el nombre y el apellido? Es más, voy mas allá: de hecho no tienes mil instancias, sino que casi con toda seguridad no tienes ninguna. Las páginas aspx funcionan de forma que cuando llega una llamada se genera una instancia, se ejecuta el código, eso genera html que se envía al navegador, y entonces se destruye la instancia. Así que para cuando la página se está viendo en el navegador, resulta que en el servidor ya no existe la instancia que tenía esos controles. Cuando el navegador tenga la oportunidad de llamar al WebMethod, esos controles ya no existen en el servidor.


    lunes, 27 de abril de 2020 16:33

Todas las respuestas

  • ¿No se puede invocar controles en metodos estaticos?

    No solo no se pueden invocar controles, sino que no se puede invocar ninguna otra cosa que no sea estática. Cualquier dato de instancia no se puede invocar desde un método estático.

    Y si lo piensas bien, tiene mucho sentido: el método estático es único, pero las instancias son muchas. ¿Cuál de las instancias es la que debería ser accedida desde el método estático?

    En el caso de los controles, imagínate que tienes a mil usuarios conectados a tu web, cada uno de ellos con su propia instancia de txtnombre y txtapellido. Cuando accedes a estas variables desde el método estático, ¿de cuál de esos mil usuarios se debería tomar el nombre y el apellido? Es más, voy mas allá: de hecho no tienes mil instancias, sino que casi con toda seguridad no tienes ninguna. Las páginas aspx funcionan de forma que cuando llega una llamada se genera una instancia, se ejecuta el código, eso genera html que se envía al navegador, y entonces se destruye la instancia. Así que para cuando la página se está viendo en el navegador, resulta que en el servidor ya no existe la instancia que tenía esos controles. Cuando el navegador tenga la oportunidad de llamar al WebMethod, esos controles ya no existen en el servidor.


    lunes, 27 de abril de 2020 16:33
  • Muchas gracias por responder a mi pregunta y aclararme mejor sobre este metodo!
    lunes, 27 de abril de 2020 17:05
  • Hola

     

     

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

    lunes, 27 de abril de 2020 19:25
    Moderador