In this article I will explain with an example, how to keep (retain) Password TextBox and prevent it from clearing across PostBack in ASP.Net using C# and VB.Net.
This article will explain, why ViewState does not work for Password TextBox i.e. TextMode Password and why Password TextBox clears on PostBack in ASP.Net using C# and VB.Net.
Security Reason
Retaining Password in ASP.Net Password TextBox will make browsers print the Password in the Page’s HTML and hence it is not recommended to use this technique for Login form.
Why ViewState does not work for ASP.Net Password TextBox?
ASP.Net does not store Password TextBox values in ViewState due to the security reason and hence whenever PostBack occurs, the values of TextBoxes with TextMode property set as Password are not set.
If you try to set the Text property of the Password TextBox, then too it will not be displayed in the Password TextBox.
Though it is not recommended to retain values of Password TextBoxes across PostBack on Login forms, still there are places where it could be really helpful such has Registration Form where users need to enter Password twice.
HTML Markup
The following HTML Markup consists of an HTML Table.
The HTML Table consists of two ASP.Net TextBoxes and a Button control.
The Password TextBox TextMode property has been set with Password.
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Username:</td>
<td><asp:TextBox ID="txtUserName" runat="server" /></td>
</tr>
<tr>
<td>Password:</td>
<td><asp:TextBox ID="txtPassword" runat="server" TextMode="Password" /></td>
</tr>
<tr>
<td><asp:Button ID="btnSubmit" Text="Submit" runat="server" /></td>
</tr>
</table>
Setting value of Password TextBox using C# and VB.Net
Inside the Page Load event, the value of the Password TextBox is set using the HTML value attribute inside the IsPostBack condition.
C#
protected void Page_Load(object sender, EventArgs e)
{
if(this.IsPostBack)
{
txtPassword.Attributes["value"] = txtPassword.Text;
}
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Me.IsPostBack Then
txtPassword.Attributes("value") = txtPassword.Text
End If
End Sub
Screenshot
Demo
Downloads