[ Foro de C# ]

Problema sobre variables utilizando C# ASP.NET

22-Jan-2015 16:44
Robinson Alexis Osorio Muñoz
5 Respuestas

Hola tengo una gran duda, la cuestión es que estoy realizando una solución web utilizando ASP.NET, declaro las variables globalmente (bueno en realidad no me acuerdo el término en que se les llama pero son esas variables que se declaran afuera de los métodos y eventos, en la clase) y le asignó un valor.
Cuando terminó de escribir por ejemplo "bool verificar = true;", automáticamente se prefija el término "private"; bueno ya realizo un cambio en un evento de un botón que el valor de "verificar" sea false (estoy seguro que cambio de ser true a false) pero  utilizo la misma variable en otro botón para  realizar una condicion "if (verificar == false)" y descubro que sigue siendo "true" como si volviera a crear la variable desde cero desde el inicio del código.
Por ningún otro lado le cambie el valor a "true", le realizo el debugging correspondiente y no encuetro que paso.

Espero una respuesta alentadora.
De antemano, gracias.


23-Jan-2015 10:13
Nacho Cabanes (+84)

Esa depuración pasos a paso (debugging) debería ayudarte a ver cómo evolucionan los valores de las variables y a descubrir el problema.

El motivo más habitual de que una variable "deba cambiar pero no cambie" es que tengas una variable local con el mismo nombre que una variable global. Si haces los cambios en la variable local, no se conservarán cuando salgas de la función/método correspondiente.

Sin ver el código, no puedo decirte nada más.


23-Jan-2015 20:52
Robinson Alexis Osorio Muñoz

Hola Nacho Cabanes, hoy mismo vi su respuesta a mi cuestionamiento, con lo que me dice que debe ver el código para decirme lo que pasa, es porque pensé que con lo que había expuesto era suficiente pero ahora mismo pongo una porción del código para ver que es lo que pasa y es un código de ejemplo (ya que el código real no puedo colocarlo ya que como trabajo en una empresa de desarrollo de software no me lo permiten):


public partial class Ejemplo
{
       private bool verificar = true;

       protected void Button1_Click(object sender, EventArgs e)
       {
             verificar = false;
       }

       protected void Button2_Click(object sender, EventArgs e)
       {
              if (verificar == true)
              {
                      lblresultado.Text = "Verdadero";
              }
              else
              {
                      lblResultado.Text = "Falso";
              }
       }
}


Lo que explique al principio, al dar clic en el botón 1, en el debugging parece tener el valor de "false", pero al dar clic en el botón 2, El condicional ingresa por "verificar == true" y muestra que es "Verdadero" lo cual debería ser "Falso", no se porque sucede esto, es como si la variable se reiniciara; y como lo había expuesto usted, no he colocado una variable local del mismo nombre en un método o evento, solamente la declare como global.

Lo que quiero es como cambiarle ese valor y obtener ese valor cambiado de nuevo para la utilización en otro evento o método

Espero una respuesta alentadora.
De antemano, gracias.


24-Jan-2015 11:53
Nacho Cabanes (+84)

La lógica de ese código es correcto.

Yo no lo he probado desde un interfaz web, sino desde Windows Forms. He puesto un punto de interrupción al entrar a "Button1_Click" y otro al entrar a "Button2_Click" y, como era de esperar, si haces clic en el botón 1, se para el programa y puedes ver los valores de la variable, donde se ve que dentro de "this" existe "verificar", que tiene el valor "true".

Si pulsas F11 para avanzar la depuración paso a paso, verás que cambia a "false". Si entonces pulsas el botón 2, verás que se entra a "Button2_Click", se comprueba la condición, se entra al "else", y se cambia el valor de "lblResultado".

Si no se comporta bien, el error está en otro sitio. Por ejemplo, puede que tengas dos etiquetas distintas, porque en tu fuente aparece "lblResultado" y "lblresultado", y eso debería darte un error de compilación a no ser que tengas dos etiquetas distintas con nombre casi idéntico.


26-Jan-2015 17:53
Robinson Alexis Osorio Muñoz

Hola Nacho Cabanes, bueno al parecer a usted le sale de maravilla el ejemplo que le administre pero la cuestión es que en mi solución es algo complicada y en mi trabajo nos dijeron que trabajemos por "ASP.NET Web application"; le cuento que por mi parte no me había ocurrido esto en una simple aplicación form, todo salia como viento en popa pero como es usted la única persona que me esta ayudando en este caso entonces porque no verifica este pequeño código en una aplicación Web, haber como le va.
Lamento haber escrito los lbl diferentes ya que lo estaba tomando como ejemplo y en verdad no le copie directamente sino que lo escribí desde el teclado; como lo que le había expuesto en un texto más arriba, no puedo colocar todo el código de la solución de mi trabajo ya que estoy trabajando en grupo.
Si usted quiere y con mayor facilidad para que usted no elabore el ejemplo que le plantee, porque no le envío la aplicación por su correo y le prueba haber que pasa (no se preocupe de virus ya que mi computadora esta 0% fuera de virus).

Espero una respuesta alentadora.
De antemano, gracias.


27-Jan-2015 01:39
Nacho Cabanes (+84)

No te garantizo que lo pueda probar. Para aplicaciones web, uso PHP sobre servidores Linux, no ASP.Net sobre servidores Windows.

Pero puedes probar a copiar y pegar el código aquí por si veo algo que me parezca la raíz del problema.

Aun así, en general, ten en cuenta que en aplicaciones de servidor (PHP, ASP.Net), no puedes esperar que un clic de un botón cambie el valor de una variable como lo haría en una aplicación de escritorio. En general, un botón provocará un envío de información al servidor y la recepción de una página distinta (o la misma página con información actualizada). Si añades Javascript, puedes hacer que se procese en local (en el cliente). Pero el ciclo de vida de una aplicación es radicalmente distinto cuando está en entorno web, comparado con lo que puedes encontrar en una aplicación de escritorio (aunque ASP.Net intenta reducir un poco esas diferencias), y tu programa debe tener en cuenta esas diferencias. En general, no puedes esperar respuestas inmediatas en local a eventos que deben procesarse en el servidor. Pero insisto, no uso ASP.Net y no sé cuánta parte de tu código se convierte en programa de servidor y cuánta se convierte en programa de cliente.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)