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,这对于普通验证器来说非常有效。只有自定义的那个跑得太晚了…
有什么建议吗?
您可能应该让您的弹出窗口触发一个事件,以检查输入是否有效后,您关闭它。我将提供一些伪代码。
<popupModalBox OnClose="PopupModal_OnClose" />
在服务器上触发一个方法
void PopupModal_OnClose(object sender, EventArgs e)
{
if (Page.IsValid)
{
// Do something
}
else
{
// Do something else
}
}