用TextMode = Password分配数据库到文本框的值

问题描述:

我有一个asp:TextBoxTextMode = "Password",当我需要输入时它的工作正常。 我的文本框:用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。该文本框变空。
当我删除这部分,它工作正常...
有没有办法解决它?

+1

为什么你会自动填充密码? – 2013-03-05 17:43:57

+0

@BradM我有一个“编辑注册数据”,可以编辑姓名,密码,电子邮件等......并且我从数据库中提取一些这些数据,所以如果他只需要编辑名称,那么密码已经存在,他不需要输入它只是为了编辑名字......如果他想编辑密码,它已经存在,他只需要键入新密码。或者你认为它是一种不好的做法? – Ghaleon 2013-03-05 17:46:46

+1

在数据库中存储未加密的密码是一种可怕的做法。向用户发送密码只会增加伤害。 – 2013-03-05 17:50:08

你将不得不以编程方式更改文本模式,就像这样:

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/

+0

BUt我不想显示密码的值,我想继续显示'****'。 – Ghaleon 2013-03-05 17:47:52

+0

您的问题表明您想要将Textbox.text分配给密码值。现在你说你想保持这样的状态:****请详细说明你正在做什么,因为我很困惑。 – jason 2013-03-05 17:51:40

+0

我说的是,我有这些为我的textobx分配一个值: 'Textbox1.Text = row [“login”]。ToString()'如果'TextMode = Password'打开,文本框始终为空,我问是否有办法显示值,即使使用'textmode = password'。 – Ghaleon 2013-03-05 17:55:32

根据场景...

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

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

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

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

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

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

除了密码外,您可以将所有其他数据从用户数据库中完全可以看到。

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

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

供您参考下面的答案解释了为什么ASP。用的TextMode =“密码”文本框中NET上回发空,你怎么能强制文本值将被发送回浏览器:

ASP:TextBox Value disappears in postback only when password

您不必在所有显示的密码。在您的编辑用户页面,你可以告诉他们这样伪密码(不实际的密码更换asteriks,因为他们可以,如果你查看浏览器页面源中可以看出)

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

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