es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El campo de contraseña de C# retorna vacío al postback pero se necesita borrar el campo al hacer clic en el botón.

Tengo tanto el campo de contraseña como el campo de confirmación de contraseña en mi formulario web que quedaron vacíos después de enviar nuevamente (tengo cascading DDLs. El segundo DDL solo se habilitará si se selecciona algún valor en el primer DDL y ambos son campos obligatorios. He configurado la propiedad autopostback del primer DDL en true para que en cada envío de nuevo, las contraseñas queden vacías). Para solucionar esto, utilicé el siguiente código:

if (IsPostBack)
{
    if (!String.IsNullOrEmpty(txtPassword.Text.Trim()))
    {
        txtPassword.Attributes["value"] = txtPassword.Text;
    }
    if (!String.IsNullOrEmpty(txtConfirmPassword.Text.Trim()))
    {
        txtConfirmPassword.Attributes["value"] = txtConfirmPassword.Text;
    }
}

Ahora, al hacer clic en el botón de enviar, quiero borrar todos los valores de los cuadros de texto y los DDL. Pero lo anterior no me permite borrar los campos de contraseña y confirmación de contraseña. Código para borrar los campos:

foreach (Control ctrl in form1.Controls)
{
    if (ctrl.GetType() == typeof(TextBox))
    {
        ((TextBox)(ctrl)).Text = String.Empty;
    }
    else if (ctrl.GetType() == typeof(DropDownList))
    {
        ((DropDownList)(ctrl)).SelectedIndex = 0;
    }
}

Por favor, ayúdame a solucionar el problema. Cualquier ayuda es apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en los campos txtPassword y txtConfirmPassword, los cuales no se están borrando cuando se ejecuta el bucle foreach. Esto se debe a que el atributo value de estos campos se establece en el bloque if (IsPostBack).

    Para solucionar esto, puedes modificar el bloque if (IsPostBack) para que solo se establezca el atributo value cuando la página no se está borrando. Puedes hacer esto verificando si la página no se está borrando antes de establecer el atributo value, de la siguiente manera:

    if (IsPostBack && !IsPageBeingCleared())
    {
        if (!String.IsNullOrEmpty(txtPassword.Text.Trim()))
        {
            txtPassword.Attributes["value"] = txtPassword.Text;
        }
        if (!String.IsNullOrEmpty(txtConfirmPassword.Text.Trim()))
        {
            txtConfirmPassword.Attributes["value"] = txtConfirmPassword.Text;
        }
    }
    

    Donde IsPageBeingCleared() es una función que verifica si la página se está borrando. Puedes implementar esta función de la siguiente manera:

    private bool IsPageBeingCleared()
    {
        foreach (Control ctrl in form1.Controls)
        {
            if (ctrl.GetType() == typeof(TextBox))
            {
                if (((TextBox)(ctrl)).Text != string.Empty)
                {
                    return false;
                }
            }
            else if (ctrl.GetType() == typeof(DropDownList))
            {
                if (((DropDownList)(ctrl)).SelectedIndex != 0)
                {
                    return false;
                }
            }
        }
    
        return true;
    }
    

    Esta función verifica si alguno de los cuadros de texto o listas desplegables tiene un valor distinto al valor predeterminado (es decir, vacío o índice 0) y devuelve false si encuentra alguno de esos valores. Si no encuentra ninguno de esos valores, devuelve true, indicando que la página se está borrando.

    Con estas modificaciones en el código, los campos de contraseña y confirmación de contraseña deben borrarse junto con el resto de los campos del formulario.

Comments are closed.