Пользовательский валидатор asp срабатывает слишком поздно

У меня есть форма с пользовательским валидатором для даты:

<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, и это очень хорошо работает для обычных валидаторов. Только пользовательский, который запускается слишком поздно...

Какие-либо предложения?


person telex-wap    schedule 06.06.2015    source источник


Ответы (1)


Возможно, вам следует, чтобы всплывающее окно запускало событие, чтобы проверить, действителен ли ввод после его закрытия. Я предоставлю вам некоторый псевдокод.

<popupModalBox OnClose="PopupModal_OnClose" />

Запуск метода на сервере

void PopupModal_OnClose(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        // Do something
    }
    else
    {
        // Do something else
    }
}
person Erik Karlstrand    schedule 06.06.2015