1

我有一个asp:TextBoxwith 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

4 回答 4

3

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

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

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

如果用户不想编辑/更改他们的密码,他们不要输入一个,并且您在保存时不要替换现有密码。

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

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

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

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

ASP:TextBox 值仅在密码时才会在回发中消失

于 2013-09-12T16:07:08.183 回答
1

您根本不必显示密码。在您的编辑用户页面上,您可以向他们显示这样的虚拟密码(不要用实际密码替换星号,因为如果您在浏览器中查看页面源代码可以看到它们)

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

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

于 2013-11-26T07:02:17.003 回答
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/ )

于 2013-03-05T17:47:06.573 回答
1

根据场景...

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

或者,作为更复杂的解决方案,解析您的出站 html 以查找输入元素并将空字符串替换为实际密码。

于 2013-03-05T17:47:44.547 回答