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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top