3

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

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

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

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

<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" на элемент, чтобы он по-прежнему работал с обновляемыми полями.

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

1

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

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

+0

Раскрывающийся действительно должны быть проверены, так что не будет работать – Tom

0
function validateCommand(group) { 
     if (typeof (Page_ClientValidate) == 'function') { 
      Page_ClientValidate(group); 
      if (Page_IsValid) { 
       Page_BlockSubmit = !confirm('Are you sure?'); 
      } 
     } 
    } 
3

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

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

И DropDownList

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

Смежные вопросы