【问题标题】:Text box getting cleared because of update panel由于更新面板,文本框被清除
【发布时间】:2013-08-23 08:11:32
【问题描述】:

我有一个表,在那个表中我有一个,在那个表中,我有 更新面板,其更新模式设置为 有条件。在此更新面板中,我还有另一个 table。该表包含 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>
    .
    .
    .

文本框 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();
            }
        }

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

【问题讨论】:

    标签: c# html asp.net textbox updatepanel


    【解决方案1】:
         <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 
    

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

    protected void Page_Load(object sender, EventArgs e)
     {
          txtbx.Attributes.Add("value", txtbx.Text);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多