Validador em
-
23-08-2019 - |
Pergunta
O seguinte código .NET 3.5, colocado em um arquivo aspx, irá desencadear um erro de JavaScript quando a página é carregada (para usuários que têm JavaScript habilitado):
<noscript>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server"
ControlToValidate="txt"></asp:RequiredFieldValidator>
<asp:Button ID="btn" runat="server" Text="Button" />
</noscript>
O erro acontece porque o JavaScript gerado pelo controle de validação ASP.NET não contém um cheque nulo antes da segunda linha de código abaixo:
var ctl00_body_txt_RequiredFieldValidator =
document.all ?
document.all["ctl00_body_txt_RequiredFieldValidator"] :
document.getElementById("ctl00_body_txt_RequiredFieldValidator");
ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";
Alguém pode sugerir uma solução para isso?
Nota de rodapé: Por que estou fazendo isso? Para meus usuários não-JavaScript Eu estou substituindo algumas funcionalidades AJAX com alguns componentes de interface do usuário diferentes, que validação necessidade.
Solução
Você deve adicionar o seguinte para o RequiredFieldValidator:
enableclientscript="false"
Já que você está usando estes em
Isto irá forçar a validação de acontecer (automaticamente) no lado do servidor para você.
Apenas certifique-se chamar de " Página .IsValid " antes de processar a resposta.
BaseValidator.EnableClientScript para mais detalhes.
Outras dicas
O javascript está à procura de um elemento contido no noscript? AFAIK não há nenhuma maneira limpa para detectar o suporte de script do lado do servidor.
Eu acho que você vai precisar para construir em um redirecionamento (eu vi este feito com uma meta-refresh em uma noscript cabeçalho se você não se importa uma falha de validação) para empurrar os usuários noscript a um "por favor turnscript em page" ou fazer alguma cirurgia para soltar a ligação que pode levar uma certa quantidade de reinvenção da roda validação / controle. Esta é uma daquelas áreas onde acoplamento forte do asp.net entre o controlador e ver realmente pune.