【问题标题】:asp Custom Validator fires too lateasp 自定义验证器触发太晚
【发布时间】:2015-08-21 08:51:00
【问题描述】:

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

<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,这对于普通验证器非常有效。只是自定义的太晚了吗……

有什么建议吗?

【问题讨论】:

    标签: c# asp.net customvalidator


    【解决方案1】:

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

    <popupModalBox OnClose="PopupModal_OnClose" />
    

    触发服务器上的方法

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

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多