我有一个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
时。文本框变空。
当我删除这部分时,它工作正常...
有办法解决它吗?
答案 0 :(得分:3)
您无需将数据库中的密码值分配到“编辑注册数据”表单中的密码文本框,用户无法以任何方式查看密码文本,为什么要显示密码?
当用户编辑他们的数据时,编辑表单中的密码和确认密码文本框应显示为空。
如果用户想要编辑/更改现有密码,只需输入并确认,然后保存即可;在保存IF用户输入密码时,您将用新密码替换现有密码。
如果用户不想编辑/更改密码,请不要输入任何密码,保存时不要替换现有密码。
除密码外,您可以从数据库中获取用户可以实际查看的所有其他数据。
您应该/可以从代码中删除这些行:
string aux = crip.DescriptografaString(row["senha"].ToString());
Txt_SenhaAtual.Text = aux;
Txt_SenhaAtual.TextMode = TextBoxMode.Password;
以下答案解释了为什么带有TextMode =“Password”的ASP.NET文本框在回发时为空,以及如何强制将文本值发送回浏览器:
答案 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个值。