Asp.net 使用TextMode=Password从数据库向textbox分配一个值

Asp.net 使用TextMode=Password从数据库向textbox分配一个值,asp.net,textbox,Asp.net,Textbox,我有一个带有TextMode=“Password”的asp:TextBox,当我需要输入时,它工作正常。 我的文本框: <asp:TextBox ID="Txt_NovaSenha" runat="server" TextMode="Password" Width="170px"></asp:TextBox> 但是当它使用TextMode=Password时。文本框变为空。 当我移除此部件时,它工作正常… 有办法解决这个问题吗?您必须以编程方式更改文本模式,如下所示:

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

<asp:TextBox ID="Txt_NovaSenha" runat="server"  TextMode="Password" Width="170px"></asp:TextBox>
但是当它使用
TextMode=Password
时。文本框变为空。
当我移除此部件时,它工作正常…

有办法解决这个问题吗?

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

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>

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

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>

取决于场景

// don't use an asp textbox
<input type="password" value="<asp:Literal id="passwordText" runat="server" />" />
//不要使用asp文本框

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

取决于场景

// don't use an asp textbox
<input type="password" value="<asp:Literal id="passwordText" runat="server" />" />
//不要使用asp文本框

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

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

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

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

如果用户不想编辑/更改其密码,他们不会输入密码,保存时也不会替换现有密码

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

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

string aux = crip.DescriptografaString(row["senha"].ToString());
Txt_SenhaAtual.Text = aux;
Txt_SenhaAtual.TextMode = TextBoxMode.Password;
下面的答案解释了为什么回发时带有TextMode=“Password”的ASP.NET文本框为空,以及如何强制将文本值发送回浏览器,以供参考:


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

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

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

如果用户不想编辑/更改其密码,他们不会输入密码,保存时也不会替换现有密码

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

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

string aux = crip.DescriptografaString(row["senha"].ToString());
Txt_SenhaAtual.Text = aux;
Txt_SenhaAtual.TextMode = TextBoxMode.Password;
下面的答案解释了为什么回发时带有TextMode=“Password”的ASP.NET文本框为空,以及如何强制将文本值发送回浏览器,以供参考:


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


将文本框的textmode设置为“Password”。
当用户输入/更新密码时,他们仍然会看到“*”。您可以包括一个确认密码文本框,并在更新时比较这两个值。

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


将文本框的textmode设置为“Password”。
当用户输入/更新密码时,他们仍然会看到“*”。您可以包括一个确认密码文本框,并在更新时比较这两个值。

为什么要自动填充密码?@BradM我有一个“编辑注册数据”来编辑姓名、密码、电子邮件等。。。我从数据库中带来了一些数据,所以如果他只需要编辑名称,密码已经存在,他不需要键入它来编辑名称。。。如果他想编辑密码,密码也已经存在了,他只需要输入新密码。或者你认为这是一种糟糕的做法?在数据库中存储未加密的密码是一种糟糕的做法。向用户发送密码只是雪上加霜。@BradM它已经在数据库中加密了。。。你有什么建议吗?可能会将它们分成两部分,一部分只编辑密码,另一部分编辑其余数据。。。你怎么想?谢谢你的帮助;DIf如果它在数据库中加密,你如何解密它???为什么你会自动填充密码?@BradM我有一个“编辑注册数据”,可以编辑姓名、密码、电子邮件等。。。我从数据库中带来了一些数据,所以如果他只需要编辑名称,密码已经存在,他不需要键入它来编辑名称。。。如果他