Обратная связь 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;
}
};
Dropdowns:
<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>
4 ответа
Я сталкивался с этой проблемой много раз, когда использовал панели обновления.
Я обнаружил, что если поле нужно проверить, то вы должны на самом деле установить CausesValidation="true"
на элементе, чтобы он все еще работал с панелями обновления.
Надеюсь, что это помогает вам!
Просто настройка 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"/>
Если выпадающий список не нуждается в проверке, вы можете установить CausesValidation="false"
в начальном раскрывающемся списке. Это приведет к тому, что он не будет запускать проверку, поэтому он может быть изменен по желанию.
В качестве альтернативы вы можете поместить DropDownList в другую группу ValidationGroup, чтобы ее изменение не вызывало проверку других элементов управления.
function validateCommand(group) {
if (typeof (Page_ClientValidate) == 'function') {
Page_ClientValidate(group);
if (Page_IsValid) {
Page_BlockSubmit = !confirm('Are you sure?');
}
}
}