2017-02-24 1 views
-1

J'essaie d'activer la fonctionnalité Afficher/Masquer le mot de passe. Je crée un formulaire web asp.net en utilisant C#.Essayer d'activer/masquer la fonctionnalité dans asp.net

Mon code est comme ci-dessous,

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class show : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (CheckBox1.Checked == false) 
     { 
      TextBox1.TextMode = TextBoxMode.Password; 
     } 

     if (CheckBox1.Checked == true) 
     { 
      TextBox1.TextMode = TextBoxMode.SingleLine; 
     } 
    } 
} 

Sur MyPage.aspx,

il y a une case à cocher qui autopostback propriété est vraie et une zone de texte dont textmode est le mot de passe.

Le résultat attendu est: -

mot de passe show en texte lorsque la case est cochée.

Masquer le mot de passe lorsque la case n'est pas cochée.

Le problème est le suivant: -

Ce code fonctionne qu'une seule fois dire qu'elle n'est pas en cours d'exécution lorsque la case est cochée ou décochée à nouveau. La zone de texte devient vide.

S'il vous plaît, aidez-moi bientôt.

+1

Je suggère de ne pas le faire avec retour après. C'est une façon très lourde de le faire quand il devrait être JavaScript côté client surtout. –

+0

Merci Kay Lee d'avoir révisé mon article. –

Répondre

0

Vous perdez de la valeur au sein de TextBox car lors d'un changement de sélection, la page se charge à nouveau, vous devez vérifier s'il s'agit d'un postBack ou d'un chargement initial et définir la valeur textBox.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      string Password = TextBox1.Text; 
      TextBox1.Attributes.Add("value", Password); 
     } 
    } 

Votre problème sera résolu. Je l'ai testé.

J'espère que ça aide!

+0

merci. Ça aide pour moi. –

0

Vous ne pouvez pas définir la propriété de texte d'un champ de type de mot de passe pour la sécurité reasons.So une autre façon de définir la valeur après le changement de mode est

if (CheckBox1.Checked == false) 
      { 
       string pass = TextBox1.Text; 
       TextBox1.TextMode = TextBoxMode.Password; 
       TextBox1.Attributes.Add("value", pass); 

      } 

      if (CheckBox1.Checked) 
      { 
       TextBox1.TextMode = TextBoxMode.SingleLine; 
      } 
1

Il est exactement zéro nécessaire d'utiliser un postback pour cela. An example using jQuery:

Markup:

<label>Password fields are just a UI convenience:</label> 
<input type="password" id="password" value="super secret password" /> 
<label> 
    <input type="checkbox" id="toggle-password" /> Toggle 
</label> 

Code jQuery:

$(function() { 
    $('#toggle-password').on('change', function(e) { 
    var _this = $(this); 

    if (_this.is(':checked')) { 
     $('#password').attr({ 
     'type': 'text' 
     }); 
    } else { 
     $('#password').attr({ 
     'type': 'password' 
     }); 
    } 
    }) 
}); 

A vanilla JS version:

var toggle = document.getElementById('toggle-password'); 
var textbox = document.getElementById('password'); 

toggle.addEventListener("click", function() { 
    var isChecked = toggle.checked; 

    if (isChecked) { 
    textbox.type = "text"; 
    } else { 
    textbox.type = "password"; 
    } 
})