Search code examples
asp.netvalidationautopostback

How to fire DropDownList AutoPostBack only if all validations in a page are met


I've got in a page three filters. Two textboxes for dates (from and to) and a dropdownlist for a specific value. Well I have several validations for the dates filters and they all work as expected. the problem is that even if the validations are not met I can still change the selected item in the dropdownlist, which has its AutoPostBack property set to true.

Here's the code I use to validate my page.As you can see , I'm already using a validation group.

        <table align="center">
            <tr>
                <td>
                    FROM
                </td>
                <td>
                    <asp:TextBox ID="txtFromDate" runat="server" Width="80px" Style="text-align: center"></asp:TextBox>
                    <Toolkit:CalendarExtender ID="ceFechaInicial" runat="server" Format="dd/MM/yyyy"
                        PopupButtonID="ImgFechaInicial" TargetControlID="txtFromDate" />                          
                    <Toolkit:MaskedEditExtender ID="meeFecha" runat="server" AcceptNegative="Left" DisplayMoney="Left"
                        ErrorTooltipEnabled="false" Mask="99/99/9999" MaskType="Date" MessageValidatorTip="false"
                        UserDateFormat="DayMonthYear" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError"
                        TargetControlID="txtFromDate" ClearMaskOnLostFocus="true" />
                    <Toolkit:MaskedEditValidator ID="mevFecha" runat="server" ControlExtender="meeFecha"
                        ControlToValidate="txtFromDate" Display="None" EmptyValueBlurredText="" EmptyValueMessage=""
                        ErrorMessage="Fecha no es válida" InvalidValueBlurredMessage="*" InvalidValueMessage="La fecha no es válida"
                        SetFocusOnError="true" TooltipMessage="" ValidationGroup="findGroup" IsValidEmpty="true" />
                    <Toolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender5" runat="Server" CssClass="customCalloutStyle"
                        HighlightCssClass="validatorCalloutHighlight" TargetControlID="mevFecha" WarningIconImageUrl="~/images/msjeAdvertencia.png" />
                    <asp:CompareValidator ID="CompareValidator3" runat="server" ControlToCompare="txtFromDate"
                        ControlToValidate="txtToDate" Display="None" ErrorMessage="Fecha final no debe ser menor que la inicial"
                        Operator="GreaterThanEqual" SetFocusOnError="false" Type="Date" ValidationGroup="findGroup"></asp:CompareValidator>
                    <Toolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender2" runat="Server" CssClass="customCalloutStyle"
                        HighlightCssClass="validatorCalloutHighlight" TargetControlID="CompareValidator3"
                        WarningIconImageUrl="~/images/msjeAdvertencia.png" />                           
                </td>
                <td>
                    TO
                </td>
                <td>
                    <asp:TextBox ID="txtToDate" runat="server" Width="80px" Style="text-align: center"></asp:TextBox>
                    <Toolkit:CalendarExtender ID="ceFechaFinal" runat="server" Format="dd/MM/yyyy" PopupButtonID="ImgFechaFinal"
                        TargetControlID="txtToDate" />                            
                    <Toolkit:MaskedEditExtender ID="txtToDate_MaskedEditExtender" runat="server"
                        AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="false" Mask="99/99/9999"
                        MaskType="Date" MessageValidatorTip="false" UserDateFormat="DayMonthYear" OnFocusCssClass="MaskedEditFocus"
                        OnInvalidCssClass="MaskedEditError" TargetControlID="txtToDate" ClearMaskOnLostFocus="true" />
                    <Toolkit:MaskedEditValidator ID="mevFecha0" runat="server" ControlExtender="meeFecha"
                        ControlToValidate="txtToDate" Display="None" EmptyValueBlurredText="" EmptyValueMessage=""
                        ErrorMessage="Fecha no es válida" InvalidValueBlurredMessage="" InvalidValueMessage="La fecha no es válida"
                        SetFocusOnError="true" TooltipMessage="" ValidationGroup="findGroup" IsValidEmpty="true" />
                    <Toolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender4" runat="Server" CssClass="customCalloutStyle"
                        HighlightCssClass="validatorCalloutHighlight" TargetControlID="mevFecha0" WarningIconImageUrl="~/images/msjeAdvertencia.png" />
                    <asp:CompareValidator ID="CompareValidator4" runat="server" ControlToCompare="txtToDate"
                        ControlToValidate="txtFromDate" Display="None" ErrorMessage="Fecha final debe ser mayor que la inicial"
                        Operator="LessThanEqual" SetFocusOnError="false" Type="Date" ValidationGroup="findGroup"></asp:CompareValidator>
                    <Toolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender3" runat="Server" CssClass="customCalloutStyle"
                        HighlightCssClass="validatorCalloutHighlight" TargetControlID="CompareValidator4"
                        WarningIconImageUrl="~/images/msjeAdvertencia.png" />
                    <asp:CustomValidator ID="StartDateValidator" runat="server" ClientValidationFunction="InitValidators"
                        Display="Dynamic" ErrorMessage="" OnServerValidate="StartDateValidator_Validate"
                        ValidationGroup="findGroup"></asp:CustomValidator>                            
                </td>
                <td>
                    &nbsp;
                </td>
                <td>
                    <asp:DropDownList ID="ddlModels" runat="server" AppendDataBoundItems="True"
                        AutoPostBack="True" OnSelectedIndexChanged="ddlModels_SelectedIndexChanged">
                        <asp:ListItem Value="0">Select</asp:ListItem>
                    </asp:DropDownList>
                    <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="ddlModels"
                        Display="None" ErrorMessage="Select a model" Operator="NotEqual" ValidationGroup="findGroup"
                        ValueToCompare="0"></asp:CompareValidator>
                    <Toolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender9" runat="Server" CssClass="customCalloutStyle"
                        HighlightCssClass="validatorCalloutHighlight" TargetControlID="CompareValidator1"
                        WarningIconImageUrl="~/images/msjeAdvertencia.png" />
                </td>
                <td>
                    &nbsp;
                </td>                       
                <td>
                    <asp:Button ID="btnFind" runat="server" CssClass="button small blue" OnClick="btnFind_Click"
                        Text="Buscar" ValidationGroup="findGroup" Width="64px" />
                </td>                        
            </tr>
        </table>

Is there any way to only fire the postback caused by the dropdownlist AutoPostBack when all the validations in the page are met?


Solution

  • Add CausesValidation = "True"

    <asp:DropDownList ID="ddlModels" runat="server" AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="ddlModels_SelectedIndexChanged"
     ValidationGroup="findGroup" CausesValidation="true">
        <asp:ListItem Value="0">Select</asp:ListItem>
    </asp:DropDownList>