1

我有一个表,在那个表中我有一个,在那个表中,我更新了更新模式设置为条件的面板。在此更新面板中,我有另一个。该表包含 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 框 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();
            }
        }

现在我无法理解我到底在做什么错,表内有更新面板会导致问题吗?

4

2 回答 2

0

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

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

于 2013-08-23T08:26:46.090 回答
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才能将其用于btnClickevent 。

  OR 

您还可以在事件中设置textbox属性, 这样做是一种非常糟糕的做法Page_Load

protected void Page_Load(object sender, EventArgs e)
 {
      txtbx.Attributes.Add("value", txtbx.Text);
于 2013-08-23T08:28:29.900 回答