【问题标题】:ASP.Net Custom Validator failed ,form gets submittedASP.Net 自定义验证器失败,表单被提交
【发布时间】:2014-03-05 05:43:27
【问题描述】:

我制作了一个表单,其中有两个 RAD DateTimePicker Controls 。一个用于开始日期时间,另一个用于结束日期时间。在自定义验证器中,我比较了迄今为止选择的日期时间,因此使其有效或无效,因此其服务器验证事件代码如下所示。

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) {
    if (rdpEndDate.SelectedDate < rdpStartDate.SelectedDate) {
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
}

它的设计代码是这样的。

<telerik:RadDateTimePicker ID="rdpStartDate" runat="server" AutoPostBackControl="Both" onselecteddatechanged="rdpStartDate_SelectedDateChanged">
    <TimeView CellSpacing="-1" Culture="en-IN">
    </TimeView>
    <TimePopupButton HoverImageUrl="" ImageUrl="" />
    <Calendar UseColumnHeadersAsSelectors="False" UseRowHeadersAsSelectors="False" ViewSelectorText="x">
    </Calendar>
    <DateInput AutoPostBack="True" DateFormat="dd-MM-yyyy" DisplayDateFormat="dd-MM-yyyy">
    </DateInput>
    <DatePopupButton HoverImageUrl="" ImageUrl="" />
</telerik:RadDateTimePicker>
<asp:Label ID="Label2" runat="server" Text=" To" CssClass="h_text"></asp:Label>
<telerik:RadDateTimePicker ID="rdpEndDate" runat="server" onselecteddatechanged="rdpEndDate_SelectedDateChanged" AutoPostBackControl="Both">
    <TimeView CellSpacing="-1" Culture="en-IN"></TimeView>

    <TimePopupButton ImageUrl="" HoverImageUrl=""></TimePopupButton>

    <Calendar UseRowHeadersAsSelectors="False" UseColumnHeadersAsSelectors="False" ViewSelectorText="x"></Calendar>

    <DateInput DisplayDateFormat="dd-MM-yyyy" DateFormat="dd-MM-yyyy" AutoPostBack="True"></DateInput>

    <DatePopupButton ImageUrl="" HoverImageUrl=""></DatePopupButton>
</telerik:RadDateTimePicker>

设计器中的验证器源代码是这样的。

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="rdpEndDate"
                    ErrorMessage="End Date Cant be Before Start Date" 
                    OnServerValidate="CustomValidator1_ServerValidate" SetFocusOnError="True" 
                    ValidateEmptyText="True" ValidationGroup="submit">End Date Cant be Before Start Date</asp:CustomValidator>

我想问的是,即使自定义验证器失败,我的表单也会提交错误值。可能是什么原因?我怎样才能避免这种情况?

【问题讨论】:

  • 为自定义验证器设置验证组
  • @Saritha.S.R 正如上面代码中提到的那样,我已经做到了。
  • 你是否也在按钮中设置了相同的验证组
  • 是的。我也向按钮添加了相同的验证组。

标签: asp.net telerik datetimepicker customvalidator


【解决方案1】:

使用服务器验证器事件,例如:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) {
    if (rdpEndDate.SelectedDate < rdpStartDate.SelectedDate) {
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
}

您还必须检查您的服务器事件,例如:(例如,如果您使用的是带有按钮单击的验证器)

protected void btn_OnClick(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    {
         Response.Write("Page is valid.");
    }
    else 
    {
         Response.Write("Page is not valid!");
    }
}

我的建议: Telerik 也有很好的客户端支持,所以我建议您使用自定义验证器的客户端验证。

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="rdpEndDate"
                    ErrorMessage="End Date Cant be Before Start Date" 
                    ClientValidationFunction="CheckDates" 
                    SetFocusOnError="True" 
                    ValidateEmptyText="True" ValidationGroup="submit">End Date Cant be Before Start Date</asp:CustomValidator>

然后在 Javascript 中:

function CheckDates(sender, args)
{
    var cltRdpEndDate= $find("<%=rdpEndDate.ClientID %>");
    var cltRdpStartDate= $find("<%=rdpStartDate.ClientID %>");    

    if(cltRdpEndDate.get_dateInput().get_selectedDate()< cltRdpStartDate.get_dateInput().get_selectedDate())//if your condtion fails here
    {
        args.IsValid = false;
        return;
    }
        args.IsValid = true;
}

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2013-04-15
    相关资源
    最近更新 更多