ASP.Net自定义验证程序失败,表单已提交

ASP.Net自定义验证程序失败,表单已提交,asp.net,telerik,datetimepicker,customvalidator,Asp.net,Telerik,Datetimepicker,Customvalidator,我制作了一个表单,其中有两个RAD DateTimePicker控件。一个用于开始日期时间,另一个用于结束日期时间。在自定义验证器中,我比较了迄今为止选择的日期时间,因此使其有效或无效,相应地,其服务器验证事件代码如下所示 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { if (rdpEndDate.SelectedDate < rdpStar

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

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>
受保护的void CustomValidator1\u ServerValidate(对象源,ServerValidateEventArgs args){
如果(rdpEndDate.SelectedDate
它的设计代码是这样的

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>

设计器中的验证程序源代码如下所示

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>
结束日期不能早于开始日期

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

服务器验证程序事件如下:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) {
    if (rdpEndDate.SelectedDate < rdpStartDate.SelectedDate) {
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
}
我的建议: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;
}
函数检查日期(发送方、参数)
{
var cltRdpEndDate=$find(“”);
var cltRdpStartDate=$find(“”);
if(cltRdpEndDate.get_dateInput().get_selectedDate()
set validationgroup forcustomvalidator@Saritha.S.R我已经按照上面代码中提到的那样做了。您是否在button alsoYes中设置了相同的validationgroup。。我还向button添加了相同的验证组。