0

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

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

这是前端的代码:

<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
4

5 回答 5

0

这是一个简单的例子:

<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
于 2013-05-02T05:47:07.957 回答
0

也许你可以使用 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>
于 2013-05-01T10:04:57.203 回答
0

您所描述的行为的唯一合乎逻辑的原因可能是,您将上述密码框放在另一个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
于 2013-05-01T13:01:29.733 回答
0

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

请让你的问题更清楚


尽量不要使用更新面板,

尝试这个

<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

于 2013-05-01T10:14:07.360 回答
0

这是我在 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();

希望有帮助:)

于 2013-05-01T10:19:57.427 回答