ASP.一个带有需要验证的文本框的UpdatePanel



我有一个情况,在UpdatePanel输入电子邮件的文本框需要被验证:——RequiredFieldValidator- RegularExpressionValidator

每个验证器都有一个ValidatorCalloutExtender来标注它的UpdatePanel之外的错误信息。

我在互联网上搜索解决方案,但从我的研究来看,UpdatePanel似乎与Validator不兼容。我找到了一个解决方案,这是创建自定义onBlur文本框(扩展asp.net文本框…)。然而,我更喜欢一个更简单的解决方案,不需要太多的代码修改。

下面是我的asp.net代码:

电子邮件:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
   <ContentTemplate>
      <asp:TextBox ID="txtLoginPageRegisterEmail" runat="server" MaxLength="33" TabIndex="4" BackColor="#DBDBDB" size="40" BorderWidth="0px" AutoPostBack="true" OnTextChanged="txtLoginPageRegisterEmail_TextChanged"></asp:TextBox>
   </ContentTemplate>
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="txtLoginPageRegisterEmail" />
   </Triggers>
</asp:UpdatePanel>
<asp:RequiredFieldValidator ID="RFVEmail" runat="server" Display="None" ValidationGroup="Registration" ErrorMessage="Email is required." ControlToValidate="txtLoginPageRegisterEmail"></asp:RequiredFieldValidator>
<asp:ValidatorCalloutExtender ID="VCEEmail_ClientState" runat="server" TargetControlID="RFVEmail"></asp:ValidatorCalloutExtender>
<asp:RegularExpressionValidator ID="REVEmail" runat="server" Display="None" ErrorMessage="Please Enter valid Email" ControlToValidate="txtLoginPageRegisterEmail" ValidationExpression="w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*" ValidationGroup="Registration"></asp:RegularExpressionValidator>
<asp:ValidatorCalloutExtender ID="VCEEmail2_ClientState" runat="server" TargetControlID="REVEmail"></asp:ValidatorCalloutExtender>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
    <ContentTemplate></ContentTemplate>
</asp:UpdatePanel>

下面是我在VB中的代码:

Protected Sub txtLoginPageRegisterEmail_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim img As Image = New Image
    If (chkEmail()) Then
        img.ImageUrl = "~/images/login_pg/reg/r.gif"
    Else
        img.ImageUrl = "~/images/login_pg/reg/x.gif"
    End If
    If (String.IsNullOrEmpty(txtLoginPageRegisterEmail.Text)) Then
        UpdatePanel2.ContentTemplateContainer.Controls.Clear()
    Else
        UpdatePanel2.ContentTemplateContainer.Controls.Add(img)
    End If
End Sub
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ScriptManager.GetCurrent(Me).RegisterAsyncPostBackControl(txtLoginPageRegisterEmail)
End Sub

chkEmail()调用一个存储过程来检查电子邮件地址,并根据结果返回一个布尔值。

第一次,如果我输入无效的电子邮件,它将显示错误消息,但同时它将回发并更新显示正确图像的UpdatePanel2。之后,清除文本,并再次输入无效的电子邮件。它将不再显示来自验证器的错误消息。

我希望电子邮件文本框检查和回发到后面的代码,以验证电子邮件地址与以下步骤。现在我想要的是电子邮件文本框首先检查,并将回发到代码后面检查此电子邮件是否可用,所以我想要做的步骤是:

  1. 用户在文本框
  2. 中输入电子邮件地址
  3. 然后文本框失去焦点(可能使用onTextChange事件或onBlur自定义方法)
  4. 根据表达式
  5. ,首先与验证器检查是否需要输入电子邮件或拥有有效的电子邮件
  6. 验证成功后,它将触发回发到后面的代码,该代码将在数据库
  7. 中执行验证。
  8. 检查后,结果将与图像一起显示在另一个UpdatePanel
  9. 如果用户清除文本框中的文本,它将清除图像,不会显示错误信息或仅显示RequiredFieldValidator的错误信息。

首先,将包括扩展器在内的所有验证器放入updatepanel中。

其次,在你的文本框上设置验证组,因为它是用来发送到服务器的,最后也是最重要的是在你的文本框上设置CausesValidation=true(默认为false)

另外,你不需要将文本框设置为更新面板的asyncpostback触发控件。默认情况下,ChildrenAsTriggers是true,这意味着如果回发来自子节点,它将导致更新面板刷新。

呸,我花了大约1个小时才弄清楚,导致验证被设置为false,我就像"为什么它不工作?"

最新更新