2013-03-05 26 views
1

我有一個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

回答

1

你將不得不以編程方式更改文本模式,就像這樣:

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

1

根據場景...

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

,或作爲更復雜的解決方案,解析出站HTML查找輸入元素並用實際密碼替換空字符串。

3

您不必在「編輯註冊數據」表單中將密碼值從數據庫分配到密碼文本框,用戶無法以任何方式查看密碼文本,爲什麼要顯示它?

當用戶編輯他們的數據時,編輯窗體中的密碼和確認密碼文本框應該顯示爲空。

如果用戶想編輯/更改他們現有的密碼,他們只需輸入並確認,並保存;在保存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

1

您不必在所有顯示的密碼。在您的編輯用戶頁面,你可以告訴他們這樣僞密碼(不實際的密碼更換asteriks,因爲他們可以,如果你查看瀏覽器頁面源中可以看出)

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

Set the textmode of the textbox as "Password".當用戶輸入/更新密碼時,他們仍然會看到「*」。您可以包含一個確認密碼文本框&比較更新時的2個值。

相關問題