У меня есть проект, над которым я сейчас работаю, который имеет несколько валидаторов и событий при создании обратной передачи (классические элементы управления валидатора asp).
У меня есть метод клиента, вызываемый при нажатии кнопки отправки. Он делает вызовы ajax различным службам, и как только все сделано, выполняется обратная передача (пока через классический document.forms[0].submit()
).
Проблема в том, что мой метод javascript запускается перед каждым другим вызовом javascript в очереди событий. Вторая проблема заключается в том, что мой метод возвращает значение false, чтобы заблокировать PostBack (я выполняю асинхронные вызовы, поэтому мне нужно убедиться, что PostBack выполняется только тогда, когда я уверен, что каждая обработка завершена).
Я хотел бы либо вызвать этот метод в конце очереди проверки, либо вручную вызвать каждую проверку внутри самого метода, а затем выполнить вызовы ajax.
Вот POC, чтобы объяснить проблему (простая простая страница):
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<script type="text/javascript">
Validate = function () {
setTimeout(function () { document.forms[0].submit() }, 2000);
return false;
}
</script>
<asp:TextBox runat="server" ID="txtSomething"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" onclientclick="return Validate();" Text="Button" />
<asp:RequiredFieldValidator runat="server" ID="valRequiredTruc" ControlToValidate="txtSomething">something is required</asp:RequiredFieldValidator>
</asp:Content>
Здесь функция Validate блокирует обратную передачу, чтобы что-то сделать. Через 2 секунды создается Postback, и RequiredFieldValidator проверяет содержимое, но на стороне сервера. Я хотел бы, чтобы это подтвердило клиентскую сторону.