我有一张桌子,在一张桌子内,我在其中,我已经更新面板,其更新模式设置为条件。在此更新面板中,我有另一个表格。该表包含3个文本框:旧密码,新密码和确认密码。在旧密码的 textChanged 事件中,我正在使用db中的值检查用户输入的值。但是当函数完成其执行时,无论是否更新更新面板,所有3个文本框都会丢失其值。我不知道为什么它会清除文本框。我想阻止文本框被清除。我试图在字符串变量中获取文本框文本并再次将其分配给文本框(在文本框文本更改事件和isPostBack条件下的页面加载事件中)但它也是,不起作用。
asp代码:
.
.
.
<tr>
<td colspan="3">
<div>
<asp:UpdatePanel ID="updPnlChngPwd" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<table style="width:100%">
<tr>
<td>
Old Password
</td>
<td>:</td>
<td>
<asp:TextBox ID="txtOldPwd" runat="server" Height="21px" MaxLength="50" TextMode="Password" Width="60%" ontextchanged="txtOldPwd_TextChanged"
AutoPostBack="True"></asp:TextBox>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<asp:Label ID="lblWrongOldPwd" runat="server" Text="Wrong Old Password" ForeColor="Red" Visible="False"></asp:Label>
</td>
</tr>
<tr>
<td>
Password
</td>
<td>:</td>
<td></td>
</tr>
<tr>
<td></td>
<td>:</td>
<td>
<asp:TextBox ID="txtSuppRePwd" runat="server" Height="21px" MaxLength="50" TextMode="Password" Width="60%"></asp:TextBox>
</td>
</tr>
<tr>
<td></td>
<td>
<asp:Button ID="btnUpdPwd" runat="server" Text="Change Password" onclick="btnUpdPwd_Click"/></td>
<td>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<td>
</tr>
.
.
.
tetxt box textChanged事件的C#代码:
protected void txtOldPwd_TextChanged(object sender, EventArgs e)
{
DataTable dtOldPwd = Obj.DBAccess("select Pwd from Customer where Cust_Id = " + Convert.ToInt32(Session["SuppID"]) + " and Supp_Pwd = '" + txtOldPwd.Text + "'");
if (dtOldPwd.Rows.Count == 1)
{
lblWrongOldPwd.Visible = false;
}
else
{
lblWrongOldPwd.Visible = true;
updPnlChngPwd.Update();
}
}
现在我无法理解我在做什么是错误的,表格中的更新面板是否会导致问题?
答案 0 :(得分:0)
TextBox
TextMode="Password"
将被清除。这是密码文本框的默认行为,因此一次提交所有数据并在代码中进行验证。
或者,您可以将密码存储在viewstate
或session
中,并在回发后恢复。
答案 1 :(得分:0)
<td>
<asp:TextBox ID="txtSuppRePwd" runat="server" Height="21px" MaxLength="50" TextMode="Password" Width="60%"></asp:TextBox>
</td>
您已将TextMode
设置为密码,但不会保存文本框值。
但是,您将在textchange事件
protected void txtbx_TextChanged(object sender, EventArgs e)
{
string txtValue = txtbx.Text;
ViewState["xyz"]= txtValue;
}
,您必须在ViewState
中保存此值才能将其用于btnClick
事件。
OR
您还可以在textbox
活动设置Page_Load
属性,这是非常糟糕的做法,就像这样
protected void Page_Load(object sender, EventArgs e)
{
txtbx.Attributes.Add("value", txtbx.Text);