【问题标题】:Update panel automatically clears textboxes更新面板自动清除文本框
【发布时间】:2013-05-01 09:45:50
【问题描述】:

我正在尝试结合自动打印消息的事件,以防密码不匹配。为此,我正在使用更新面板。

错误消息打印完美我的问题是两个文本框都在它之后自动创建。甚至认为我没有在代码中指定它。我不明白我做错了什么。

这是前端的代码:

<asp:TextBox ID="NonPass1" runat="server" TextMode="Password"></asp:TextBox>
 <asp:TextBox ID="NonPass2" runat="server" TextMode="Password" autopostback="True"></asp:TextBox>
                     <asp:UpdatePanel ID="UpdatePanel6" runat="server">
                     <ContentTemplate>
                     <asp:Panel ID="Panel6" runat="server">
                     <asp:Label ID="Label1"  class="errorMess" runat="server" Text="The Passwords do not match!!!"></asp:Label>
                     </asp:Panel>
                     </ContentTemplate>
                     <Triggers>
                     <asp:AsyncPostBackTrigger ControlID="NonPass2" EventName="TextChanged" />
                     </Triggers>
                     </asp:UpdatePanel>

这是后端代码(我用的是VB):

Protected Sub NonPass2_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles NonPass2.TextChanged
    If NonPass1.Text <> NonPass2.Text Then
        Panel3.Visible = False
        Panel6.Visible = True
    Else
        Panel3.Visible = False
        Panel6.Visible = False
    End If
End Sub

【问题讨论】:

  • 您知道密码字段在表单回发后不会保留值吗?如果您想比较两个密码,请使用 javascript 并验证它..
  • 我在 VB 中验证它

标签: asp.net ajax vb.net


【解决方案1】:

也许你可以使用 javascript 函数。

<script>
    var t1 = false; // textbox1 onfocus triggered = true;
    var t2 = false; // textbox2 onfocus triggered = true;
    function clearTBox() {
        if (t1 && t2) {
            if (document.getElementById("textbox1Name").value != document.getElementById("textbox1Name2").value) {
                alert("Insert your code here");
            }
        }
    }
</script>

【讨论】:

  • 警报信息将在哪里打印?我特别告诉过它不应该打印在单独的窗口中,而是在文本框下方
【解决方案2】:

这是我在 c# 中使用的,也许你可以继承该技术

    private void ClearTextBoxes()
    {
        Action<Control.ControlCollection> func = null;

        func = (controls) =>
        {
            foreach (Control control in controls)
                if (control is TextBox)
                    (control as TextBox).Clear();
                else
                    func(control.Controls);
        };

        func(Controls);
    }

然后调用 cleartextboxes();

希望有所帮助:)

【讨论】:

  • 谢谢。但这是我试图避免的。文本框正在自动清除。但我想保留内容。
  • 我不明白为什么要清除它们。我无论如何都没有在我的代码中指定它
【解决方案3】:

你是什么意思: 我的问题是两个文本框都是在它之后自动创建的

请让你的问题更清楚


尽量不要使用更新面板,

试试这个

<asp:TextBox ID="NonPass1" runat="server" TextMode="Password"></asp:TextBox> <asp:TextBox ID="NonPass2" runat="server" TextMode="Password" autopostback="True"></asp:TextBox> <div id="Div_Error" runat="server" visible="false" style="width:100%">
<asp:Label ID="Label1" class="errorMess" runat="server" Text="The Passwords do not match!!!"></asp:Label>

并在后面的代码中使用它:

Protected Sub NonPass2_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles NonPass2.TextChanged If NonPass1.Text <> NonPass2.Text Then Div_Error.visible=true; Else Div_Error.visible=false; End If End Sub

【讨论】:

  • 这不是答案,如果您无法发表评论,请不要使用“发布答案”而不是评论。
  • 我的意思是,Ater 打印了错误消息,密码的两个框都被清除了。我不知道为什么,这就是我想要避免的
  • 如果我点击文本框之外的密码和重复密码,无论密码是否匹配,它们的内容都会消失。
  • 感谢 Alla Salah 但是如果我不使用更新面板,页面将重新加载,我想在不重新加载的情况下动态输出错误消息。
  • 你能把完整的功能放在页面里吗?我会按照你的喜好来做......
【解决方案4】:

您所描述的行为的唯一合乎逻辑的原因可能是,您将上述密码框放在另一个 UpdatePanel 中。

因此,密码框将在回发时重新加载(textchanged 事件),并且出于安全原因,密码类型的 TextBox 在回发后不会保留其值。

不过,如果您不关心安全性,有一种解决方法可以“避免”密码文本框在回发时被清除,方法是在每次回发时重新分配它们的值。只需在页面加载事件中包含以下代码即可。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    NonPass1.Attributes.Add("value", NonPass1.Text)
    NonPass2.Attributes.Add("value", NonPass2.Text)
End Sub

【讨论】:

    【解决方案5】:

    这是一个简单的例子:

    <table class="mytable" cellspacing="0" style="width: 100%">
    <tr>
    <td> 
    <asp:TextBox ID="Txt_Pass" runat="server" ></asp:TextBox>
    </td>
    <td>
    <asp:TextBox ID="Txt_Re_Pass" runat="server" ></asp:TextBox>
    </td>
    
    <td width="66%" align="left"> 
    <asp:Button ID="Btn_Filter" runat="server" Text=""  Height="22px" />
    
    </td>
    
    </tr>
    </table>
    
    <br />
    
    <div  id="Div_Error" runat="server" visible="false" style="width:100%">
    <asp:Label ID="lbl_Error" runat="server" class="msg">
    </asp:Label>
    
    </div>
    

    在后面的代码中,使用这个:

    Protected Sub Btn_Filter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn_Filter.Click
    
    If Trim(Txt_Re_Pass.Text) <> "" Then
    Div_Error.Visible = False
    if Txt_Pass.Text <> Txt_Re_Pass.Text then
    Div_Error.Visible = True
    lbl_Error.text="The Passwords do not match!!!""
    else
    Div_Error.Visible = False
    End if
    Else
    Div_Error.Visible = True
    lbl_Error.text="Please re enter your password"
    End If
    
    End Sub
    

    【讨论】:

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