Evitar que se borre el campo password (ASP.NET)

Tengo una página aspx con VB.NET y me ocurre lo siguiente:
En un formulario de varios campos entro varios datos incluido el password, seguidamente en un desplegable (dropdownlist) escojo una región y automáticamente otro desplegable hace una consulta a la base de datos y me devuelve las ciudades de esa región seleccionada en el desplegable anterior. Durante este proceso se me borra el campo password, el contenido de los demás campos permanecen igual. ¿Cómo puedo evitar que se me borre el valor introducido en el password mientras hace la consulta?
<asp:textbox id="password" textmode="password" runat="server">
</asp:textbox>

1 Respuesta

Respuesta
1
Fíjate que tu pregunta es MUy interesante, tanto que me puse a analizarla detenidamente
y te voy a explicar porque el comportamiento de el control password es así.
Como mencionas tienes el problema de que cuando haces un postback al server el campo de
password pierde el valory los demás campos no lo hacen, bueno voy a explicarte un poco el
funcionamiento de los controles.
Como tu sabes los controles <asp:....> al fin de cuentas renderean controles HTML <input..>
Este control tiene una propiedad que se llama value, y es ahí donde se guarda el valor del
textbox en este caso, puedes hacer un ejemplo y generar un control asp, como este:
<asp:TextBox id="nombre" runat="server">hola</asp:TextBox>
si ves tu codigo fuente, te daras cuenta que lo veras de esta manera:
<input name="nombre" type="text" value="hola" id="nombre" />
si te fijas el texto que le asignas se guarda en la propiedad value.
El textbox de password funciona de la misma manera, recuerda que es un control <input>,
pero es lo suficientemente inteligente como para no aceptar el parámetro value, ya que
cualquier persona al ver el código fuente de la página, podría darse cuenta de la clave, recuerda
que no esta encriptada ni nada, simplemente esta con otros caracteres desplegada.
¿A qué voy con todo esto? A que esto es hecho intencionalmente por seguridad, sin embargo si
existe una forma de forzar al control a que tenga su propiedad value, solo recuerda que si alguien
ve el código fuente de la página podría ver lo que tienes en tu campo, el código que usarías
seria:
if(Page.IsPostBack)
{
controlpassword.Attributes["Value"] = controlpassword.Text;
}
Disculpa que el código este en C#, pero no debes tener ningún problema para ponerlo en VB, aquí
la explicación es que estamos forzando a agregarle al control, el parámetro value y le damos el
valor que tiene el control, antes de renderearlo en la página, de tal forma, como antes te
comente si ves el código fuente te darás cuenta del valor del campo
Espero que esta explicación te sirva, me esmere bastante para tratar de explicarlo y espero
recibir las 5 estrellas de tu parte.
Muchas gracias!. Perdón por el retraso, opté por otra solución que me aconsejaron y supongo que olvidé mi duda planteada aquí, normalmente miro durante un par de semanas si me contestan, me extraña que no viera tu respuesta puesto que parece me la contestaste el mismo día.
Simplemente me aconsejaron que no haga ningún 'postback' en la página que contiene el campo password, por razones de seguridad, pero tu solución me la apunto bien y me parece interesante.
Muchas gracias!
Cesar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas