我有一个带有日期自定义验证器的表单:
<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;
}
}
}
问题是它工作正常,它检测到需要检测的内容并触发警告,但是......它触发它太晚了!如果我在表单中输入错误的日期,我可以提交它,下次我打开modalpopup并输入新的预订时,我会发现有关此错误验证的警告。
我在同一表格中拥有的所有其他验证器都可以正常工作。这是启动表单的按钮:
<asp:Button ID="btnNew" runat="server" Text="New" CausesValidation="false" />
将CausesValidation
设置为false,这对普通验证器非常有效。只是定制的运行得太晚了......
有什么建议吗?
答案 0 :(得分:0)
你可能应该让你的弹出窗口触发一个事件来检查输入是否有效后关闭它。我将为您提供一些伪代码。
<popupModalBox OnClose="PopupModal_OnClose" />
在服务器上触发方法
void PopupModal_OnClose(object sender, EventArgs e)
{
if (Page.IsValid)
{
// Do something
}
else
{
// Do something else
}
}