由于更新面板,文本框被清除

时间:2013-08-23 08:11:33

标签: c# html asp.net textbox updatepanel

我有一张桌子,在一张桌子内,我在其中,我已经更新面板,其更新模式设置为条件。在此更新面板中,我有另一个表格。该表包含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();
            }
        }

现在我无法理解我在做什么是错误的,表格中的更新面板是否会导致问题?

2 个答案:

答案 0 :(得分:0)

回复或部分回发后,TextBox TextMode="Password"将被清除。这是密码文本框的默认行为,因此一次提交所有数据并在代码中进行验证。

或者,您可以将密码存储在viewstatesession中,并在回发后恢复。

答案 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);