Обратная передача asp.net запрещена после проверки на стороне клиента

У меня есть форма asp.net, которая содержит раскрывающийся список, который отправляет обратно на сервер при изменении и заполняет второй раскрывающийся список некоторыми датами.

Форма также содержит другие поля, некоторые из которых проверяются на стороне клиента, а некоторые — на стороне сервера.

Вот у меня проблема. Если я получаю ошибку проверки на стороне клиента, а затем пытаюсь изменить раскрывающийся список, второй раскрывающийся список не заполняется. Если я затем снова изменю первый раскрывающийся список, он будет работать так, как ожидалось.

Вот моя кнопка отправки:

<asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClientClick="Page_ClientValidate(); return checkPassengers();" OnClick="Page_Transfer" ValidationGroup="FormSubmit" />

Вот моя проверка на стороне клиента:

function checkPassengers() {
    if($("#testField").val() == "Name *" || $("#testField").val() == "") {
            $("#pltester").prepend("<p class='fillall'>Please fill in all fields marked with *</p>");
            return false;       
    }
};

Выпадающие списки:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddl1st" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:DropDownList ID="ddl1st" Width="190" AutoPostBack="true" OnSelectedIndexChanged="ChooseDates1st" runat="server" />
        <asp:DropDownList ID="ddlDepart1st" AutoPostBack="true" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>



Ответы (3)


Я уже много раз сталкивался с этой проблемой при использовании панелей обновлений.

Я обнаружил, что если поле необходимо проверить, вам нужно фактически установить CausesValidation="true" для элемента, чтобы он по-прежнему работал с панелями обновлений.

Надеюсь, что это помогает вам!

person Jamie Taylor    schedule 20.04.2012

Простая установка CausesValidation="true" не решила проблему для меня. Это может быть проблемой при использовании события SelectedIndexChange раскрывающегося списка asp. Обходной путь, который я нашел, заключался в том, чтобы сбросить проверку на внешнем интерфейсе с помощью js, проверив несуществующее имя группы проверки перед обратной передачей.

function ignoreValidation() {
            if (typeof Page_ClientValidate != 'undefined') {
                Page_ClientValidate('reset-validation');
                Page_BlockSubmit = false;
            }
            return true;
}

И для выпадающего списка

<asp:DropDownList CausesValidation="false" onchange="ignoreValidation();" runat="server" ID="CustomerDropDownList" OnSelectedIndexChanged="LoadCustomers" AutoPostBack="true"/>

person skyhigh    schedule 04.02.2015

Если раскрывающийся список не нуждается в проверке, вы можете установить CausesValidation="false" в исходном раскрывающемся списке. Это приведет к тому, что он не будет запускать проверку, поэтому его можно будет изменить по желанию.

Кроме того, вы можете поместить DropDownList в другую ValidationGroup, чтобы его изменение не запускает проверку других элементов управления.

person David    schedule 19.04.2012