asp自定义验证器触发太晚

本文关键字:自定义 验证 asp | 更新日期: 2023-09-27 17:54:12

我有一个带有日期自定义验证器的表单:

<asp:CustomValidator runat="server" ID="cusCustom"
 ControlToValidate="fdate"
 Display="None"
 OnServerValidate="customdate"
 ErrorMessage="You need to book 24 hours earlier" />
<ajaxToolkit:ValidatorCalloutExtender 
ID="ValidatorCalloutExtender4"
TargetControlId="cusCustom" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>

和后面的功能:

    protected void customdate(object sender, ServerValidateEventArgs e)
    {
        string dateString = String.Format("{0} {1}:{2}:00", fdate.Text, TimeSelector1.Hour, TimeSelector1.Minute);
        DateTime selectedDateTime = new DateTime();
        if (DateTime.TryParse(dateString, out selectedDateTime))
        {
            if (selectedDateTime > DateTime.Now.AddHours(24))
            {
                e.IsValid = true;
            } else {
                 e.IsValid = false;
            }
        }
     }

问题是它工作得很好,它检测到它需要检测的东西并触发警告,但是……它触发它太迟了!如果我在表单中输入了错误的日期,我可以提交它,并且当我下次打开表单的模态弹出框输入新预订时,我会发现关于这个错误验证的警告。

相同表单中的所有其他验证器都可以正常工作。这是启动表单的按钮:

  <asp:Button ID="btnNew" runat="server" Text="New" CausesValidation="false" /> 

它将CausesValidation设置为false,这对于普通验证器来说非常有效。只有自定义的那个跑得太晚了…

有什么建议吗?

asp自定义验证器触发太晚

您可能应该让您的弹出窗口触发一个事件,以检查输入是否有效后,您关闭它。我将提供一些伪代码。

<popupModalBox OnClose="PopupModal_OnClose" />

在服务器上触发一个方法

void PopupModal_OnClose(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        // Do something
    }
    else
    {
        // Do something else
    }
}