使用TextMode = Password将数据库中的值分配给文本框

时间:2013-03-05 17:42:16

标签: asp.net textbox

我有一个asp:TextBox TextMode = "Password",当我需要输入它时它工作正常。 我的文本框:

<asp:TextBox ID="Txt_NovaSenha" runat="server"  TextMode="Password" Width="170px"></asp:TextBox>

但是现在我需要从数据库中获取密码并将其分配给TextBox.Text,如:

DataSet ds = forza.BuscaDadosCadastrais(Session["login"].ToString());

   foreach (DataRow row in ds.Tables[0].Rows)
     {
        TxtNome.Text = row["nome"].ToString();
        TxtEmail.Text = row["email"].ToString();
        TxtLogin.Text = row["login"].ToString();
        string aux = crip.DescriptografaString(row["senha"].ToString());
        Txt_SenhaAtual.Text = aux;
        Txt_SenhaAtual.TextMode = TextBoxMode.Password;
     }   

但是当它与TextMode = Password时。文本框变空。
当我删除这部分时,它工作正常...
有办法解决它吗?

4 个答案:

答案 0 :(得分:3)

您无需将数据库中的密码值分配到“编辑注册数据”表单中的密码文本框,用户无法以任何方式查看密码文本,为什么要显示密码?

当用户编辑他们的数据时,编辑表单中的密码和确认密码文本框应显示为空。

如果用户想要编辑/更改现有密码,只需输入并确认,然后保存即可;在保存IF用户输入密码时,您将用新密码替换现有密码。

如果用户不想编辑/更改密码,请不要输入任何密码,保存时不要替换现有密码。

除密码外,您可以从数据库中获取用户可以实际查看的所有其他数据。

您应该/可以从代码中删除这些行:

string aux = crip.DescriptografaString(row["senha"].ToString());
Txt_SenhaAtual.Text = aux;
Txt_SenhaAtual.TextMode = TextBoxMode.Password;

以下答案解释了为什么带有TextMode =“Password”的ASP.NET文本框在回发时为空,以及如何强制将文本值发送回浏览器:

ASP:TextBox Value disappears in postback only when password

答案 1 :(得分:1)

您必须以编程方式更改textMode,如下所示:

Me.Txt_NovaSenha.TextMode = TextBoxMode.SingleLine
Me.Txt_NovaSenha.Text = "test"

但是,当然,这违背了密码模式的目的。从安全角度来看,您的密码应该是经过哈希处理的,并且是不可恢复的。想想你使用的电子邮件网站是如何工作的如果您忘记密码,他们不会给您,他们会让您重置密码。这是因为密码是经过哈希处理的,不能(不应该)被解除密码。

如果您只是想要一个水印,可以使用ajaxcontrol工具包。

 <ajax:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="Txt_NovaSenha" WatermarkText="****">
    </ajax:TextBoxWatermarkExtender>
<asp:TextBox ID="Txt_NovaSenha" runat="server"  TextMode="Password" Width="170px"></asp:TextBox>

请确保下载并包含工具包dll(http://ajaxcontroltoolkit.codeplex.com/

答案 2 :(得分:1)

视情况而定......

// don't use an asp textbox
<input type="password" value="<asp:Literal id="passwordText" runat="server" />" />

或者,作为一个更复杂的解决方案,解析你的出站html寻找输入元素,并用实际密码替换空字符串。

答案 3 :(得分:1)

您根本不必显示密码。在您的编辑用户页面上,您可以向他们显示一个虚拟密码,例如 (如果您在浏览器中查看页面源,则不要用实际密码替换asteriks) < /强>

Txt_SenhaAtual.Attributes.Add(value,"******");

Set the textmode of the textbox as "Password".当用户输入/更新他们的密码时,他们仍会看到“*”。您可以添加一个确认密码文本框&amp;比较更新时的2个值。