ASP.Net自定义验证器失败,表单被提交

时间:2014-03-05 05:43:27

标签: asp.net telerik datetimepicker customvalidator

我已经制作了一个表格,其中有两个RAD DateTimePicker控件。一个用于Start-DateTime,另一个用于End Date Time。在Custom Validator中,我已经比较了到目前为止所选择的日期时间因此使其有效或无效,因此其服务器验证事件代码是这样的。

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>

设计师中的Validator源代码就是这样。

<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>

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

1 个答案:

答案 0 :(得分: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;
}