1. Evento
Este é um problema que ignorei ou não descobri há muito tempo. O problema é o seguinte:
Em uma página, quando houver um controle de validação, quando o controle Button acionar o evento OnClientClick, e esse evento retornar verdadeiro e falso, o controle de validação se tornará inválido e não funcionará mais. A descrição específica é a seguinte:
A página .Net é a seguinte:
Copie o código do código da seguinte forma:
<form id="form1" runat="servidor">
<asp:ScriptManager ID="ScriptManager1" runat="servidor">
</asp:ScriptManager>
<div>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="servidor" ControlToValidate="TextBoxTest"
ErrorMessage="Não pode estar vazio" Display="None"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="servidor">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="return confirm('Tem certeza que deseja enviar?');"
</div>
</form>
Como acima, adicione o controle de validação RequireFieldValidator à página para que o valor de TextBoxTest não possa ficar vazio. Quando ButtonText envia a página, o usuário é solicitado a confirmar se ela precisa ser enviada. É uma página muito simples e parece não ter problemas. Mas quando o valor de TextBoxTest está vazio, o controle de validação não funciona e a página é enviada com sucesso. Qual é a razão para isso?
2. Responda aos eventos
O que está acontecendo? Primeiro, depois de remover o evento OnClientClick do ButtonTest, o controle de verificação funcionou. Por que isso acontece? Verifiquei o código fonte da página e descobri que o controle ButtonTest gera o seguinte código fonte:
<input type="submit" name="ButtonText" value="Test" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false))" id="ButtonText" />
Como pode ser visto nesta linha de código-fonte, o controle de validação gera um trecho de código javascript no lado do cliente para verificar se o valor no TextBox está vazio. Depois de adicionar o OnClientClick do ButtonTest, revisei o código-fonte. O código-fonte gerado pelo controle ButtonTest é o seguinte:
<input type="submit" name="ButtonText" value="Test" onclick="return confirm('Tem certeza que deseja enviar?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false )) " id="ButtonText" />
A partir desta linha de código, você pode ver claramente onde está o problema. No lado do cliente, o javascript customizado é executado primeiro e, em seguida, o javascript gerado pelo controle de validação é executado. Obviamente, neste caso, o controle de validação perde. qualquer significado.
3. Controles de resposta
Depois de saber onde está o problema, será mais fácil resolvê-lo. Minha solução é: antes de executar o javascript customizado (return confirm('Tem certeza que deseja enviar?'), verifique se os controles da página estão de acordo com o. regras, então modifiquei o evento OnClientClick do ButtonTest da seguinte maneira:
Copie o código do código da seguinte forma:
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="if(CheckClientValidate()) return Confirm('Tem certeza que deseja enviar a página?');"
O código do método CheckClientValidate() é o seguinte:
Copie o código do código da seguinte forma:
<linguagem script="javascript" type="text/javascript">
função CheckClientValidate(){
Page_ClientValidate();
if (Página_IsValid){
retornar verdadeiro;
}outro{
retornar falso;
}
}
</script>
Corra, teste. Os controles de validação funcionam. Problema resolvido.
4. Pós-escrito
Este é o problema e a solução que eu ignorei. Quando descobri esse problema, comecei a suar frio. Felizmente, fiz uma verificação rigorosa do lado do servidor, caso contrário, seria péssimo. A partir daqui também podemos ver como é necessário especificar uma verificação rigorosa do lado do servidor :-). Ele não apenas evita que "hackers" contornem a verificação do cliente, mas também evita imprecisões de dados causadas por erros que não são percebidos por si mesmo.
Observação:
Page_ClientValidate(), esta função é usada em páginas aspx contendo controles de validação da Microsoft para retornar True ou False com base na legalidade da operação de entrada do usuário.
Pode ser julgado diretamente.
Copie o código do código da seguinte forma:
if(Page_ClientValidate())
{
retornar verdadeiro;
}
outro
{
retornar falso;
}