Панель обновления ASP.NET - обязательное поле валидатора запускается для AutoPostBack DropDownList, даже если CausesValidation = false

У меня проблема, когда на экране мигает обязательный валидатор поля, когда раскрывающийся список, к которому он прикреплен, выполняет частичную обратную передачу при изменении.

По сути, страница представляет собой форму, в которой пользователь выбирает из 1-го раскрывающегося списка и заполняет второй раскрывающийся список. Затем они выбирают из 2-го раскрывающегося списка. Затем, когда пользователь выбрал оба, они нажимают кнопку отправки, и это проверяет оба раскрывающихся списка.

Оба раскрывающихся списка находятся в группе проверки, которую использует кнопка отправки. Я добавил CausesValidation = false в раскрывающийся список, но валидатор все еще мигает. Пример кода ниже ...

<form id="form1" runat="server">

    <asp:ScriptManager ID="MyAppScriptManager" runat="server"
        EnablePartialRendering="true"
        EnableCdn="true" />

        <div class="chat">

                        <asp:UpdatePanel ID="NewBookingUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
                            <ContentTemplate>

                                    <div id="FreelancerDiv" class="collapse show">
                                        <div class="card-body">
                                            <div class="form-group">
                                                <div class="input-group">
                                                    <asp:DropDownList ID="FreelancerDropDownList" runat="server" AutoPostBack="true"
                                                        CausesValidation="false"
                                                        class="custom-select form-control form-control-lg">
                                                        <asp:ListItem Value=" " Text="Choose the freelancer for your booking." />
                                                        <asp:ListItem Value="Good" Text="Good selection." />
                                                    </asp:DropDownList>
                                                </div>
                                                <asp:RequiredFieldValidator ID="FreelancerRequired" runat="server" Display="Dynamic"
                                                    ControlToValidate="FreelancerDropDownList"
                                                    ValidationGroup="RequestBookingValidationGroup"
                                                    ErrorMessage="&nbsp;Required&nbsp;"
                                                    CssClass="alert-danger" />
                                            </div>
                                        </div>
                                    </div>

                                 
                                    <div id="ServiceDiv" class="collapse show" runat="server">
                                        <div class="card-body">
                                            <div class="form-group">
                                                <div class="input-group">
                                                    <asp:DropDownList ID="ServiceDropDownList" runat="server" AutoPostBack="true"
                                                        CausesValidation="false"
                                                        class="custom-select form-control form-control-lg">
                                                        <asp:ListItem Value=" " Text="Choose the service for your booking." />
                                                        <asp:ListItem Value="Good" Text="Good selection." />
                                                    </asp:DropDownList>
                                                </div>
                                                <asp:RequiredFieldValidator ID="ServiceRequired" runat="server" Display="Dynamic"
                                                    ControlToValidate="ServiceDropDownList"
                                                    ValidationGroup="RequestBookingValidationGroup"
                                                    ErrorMessage="&nbsp;Required&nbsp;"
                                                    CssClass="alert-danger" />
                                            </div>
                                        </div>
                                    </div>
                               
                                <button id="RequestBooking" runat="server" class="btn btn-lg btn-primary btn-block" type="button" onserverclick="RequestBooking_Click" validationgroup="RequestBookingValidationGroup">
                                    Request Booking
                                </button>
                            </ContentTemplate>
                        </asp:UpdatePanel>

        </div>
</form>

person Zak    schedule 18.08.2020    source источник


Ответы (2)


Вы можете включить или отключить (enabled = true или enabled = false) необходимые валидаторы поля в обратной передаче (и / или в событии разметки или загрузки страницы). Поверьте, он включен по умолчанию, поэтому он запускается.

person JobesK    schedule 18.08.2020
comment
Не думаю, что вы читали вопрос. Затем, когда пользователь выбрал все, он нажимает кнопку отправки внизу, которая все проверяет. Если бы я просто отключил валидатор, кнопка отправки не проверила бы - person Zak; 18.08.2020
comment
Я прочитал это, все проверяется, и похоже, что вы НЕ хотите, чтобы валидатор проверял при обратной передаче? Если нет, вы можете перефразировать сообщение для ясности, чтобы я понял его лучше. - person JobesK; 18.08.2020
comment
Это правильно, при выборе раскрывающегося списка он выполняет функцию частичной обратной отправки, и валидатор на короткое время мигает, но он отправляет обратно нормально, и валидатор затем исчезает. Я хочу, чтобы валидаторы срабатывали только при нажатии кнопки отправки. - person Zak; 18.08.2020
comment
Событие нажатия кнопки должно выглядеть примерно так: Page.Validate (RequestBookingValidationGroup); if (Page.IsValid) {// нажмите здесь код} - person JobesK; 19.08.2020

@JobesK спасибо за Enabled = ложный совет, который помог :)

Я отключил валидаторы в разметке, а затем включил их в javascript в кнопке отправки ...

                ValidatorEnable(document.getElementById('<%=FreelancerRequired.ClientID%>'), true);
                                        ValidatorEnable(document.getElementById('<%=ServiceRequired.ClientID%>'), true);
                                        Page_ClientValidate("RequestBookingValidationGroup");
person Zak    schedule 18.08.2020
comment
Рад, что это было полезно. Любопытно, как вы называете валидацию? Событие нажатия кнопки должно выглядеть примерно так: Page.Validate (RequestBookingValidationGroup); if (Page.IsValid) {// нажмите здесь код} - person JobesK; 19.08.2020