none
Validator para RadioButtonList RRS feed

  • Pergunta

  • Olá pessoal,

     

    Estou fazendo um sistema de quizz onde as perguntas são exibidas uma por vez na tela.

    Exibo a pergunta e abaixo as alterantivas de resposta através de um RadioButtonList. Ao clicar no botão "Responder" um RequiredFieldValidator verifica se um dos radio buttons foi selecionado. Caso negativo, exibe a msg e não prossegue. Quando o usuário seleciona um deles, vai pra próxima pergunta e respectivas alternativas de resposta.

    O problema é que quando vai para a próxima pergunta, o validator já exibe a msg "Selecione uma das alterantivas" ao carregar a página, antes mesmo que o usuário clique em "Responder".

    Na 1a vez que a página carrega, está tudo certo, mas a partir da 2a pergunta, o validator já vem com a msg. Tentei colocar a msg = "" depois do PostBack, mas aí o validator não funciona da 2a página em diante.

    Como posso resolver isso?
    Obrigada!

    quarta-feira, 7 de maio de 2008 14:25

Respostas

  • Olá João,

    Fiz mais alguns testes mas mesmo usando o .ClearSelection() no botão não funcionou corretamente.

    Encontrei uma solução que provavelmente não é a ideal, mas resolveu o problema: troquei o controle RequiredFieldValidator por um Label e fiz o seguinte depois do PostBack:

    If rdButtonList.SelectedValue() = "" Then

    lblValidator.Visible = True

    Else

    lblValidator.Visible = False

     

    'executa a gravação do resultado e exibe próxima questão na tela

    End if

     

     

    Obrigada pela ajuda!

    quinta-feira, 8 de maio de 2008 14:07

Todas as Respostas

  • Olá _Vivi_

     

    Você quer exibir a validação somente quando ele termina de responder todas as perguntas ou a cada pergunta? As perguntas estão na mesma página?

     

    Se você puder me responder essas perguntinhas acredito que posso sugerir uma solução ideal para o seu caso...

     

    quarta-feira, 7 de maio de 2008 14:48
  • Olá Marcio,

    Obrigada por responder.

    Na página mostro apenas uma pergunta de cada vez com suas respectivas alternativas de resposta. Depois que o usuário clica em "Responder", gravo no bd e exibo a próxima pergunta.

    A validação deve ser para cada pergunta, sempre que o usuário clicar em "Responder".

    Na primeira pergunta funciona corretamente, mas quando vou para a próxima, o validator já vem exibindo a msg de erro.

    Vc tem alguma idéia pra resolver?
    Obrigada!

    quarta-feira, 7 de maio de 2008 14:57
  • Olá novamente _Vivi_

     

    Verifique inicialmente se o button responder, o validator e o sumary estão com o mesmo validation group. O button deve estar com o causes validation = true.

     

    Observe que o radiobuttonlist NÃO deve estar com o validation group definido.

     

    Defina as propriedades e mensagens preferencialmente no ASPX e não via código (para maior clareza).

     

    Após salvar a resposta ou carregar as alternativas, não deixe de chamar o Itens.Clear() do radiobuttonlist e evite chamar o Page.Validate() no Page_Load()

     

    Caso este post seja util, não esqueça de marcar e se ele resolveu seu problema não deixe de marcar o tópico como respondido. Caso ainda tenha alguma dúvida entre em contato e terei o maior prazer em ajudar.

     

    Abraços.

    quarta-feira, 7 de maio de 2008 15:27
  • Olá Marcio,

    O botão "Responder" e o Validator estão com o mesmo validation group. Não tenho summary nesta página.

    Tirei o validation group do radioButtonList.

    Defini a ErrorMessage no Aspx.

    Estou chamado o Items.Clear() antes de carregar as alternativas.

    Não estou chamado o Page,Validate() no Page_Load().

    Mesmo assim o problema persiste. Alguma outra dica?
    Obrigada!

    quarta-feira, 7 de maio de 2008 16:02
  • Olá Vivi

    Você está usando uma única página dinâmica e populando os items do RadioButtonList através de parâmetros como querystring? Como está fazendo?
    quarta-feira, 7 de maio de 2008 18:54
  • Olá João,

    Eu uso uma única página dinâmica. Nela, tenho a função ListarPergunta(), que verifica qual a próxima questão da tabela tquestoes que ainda não foi respondida e exibe na tela, juntamente com suas respectivas alternativas de resposta da tabela trespostas, que populam o RadioButtonList.

    Ao clicar no botão "Responder", é feito o PostBack da página, gravo a resposta na tabela tresultado e chamo novamente a função ListarPergunta(), que traz a próxima questão não respondida e respectivas alternativas.

    Ou seja, a mesma função ListarPergunta() é chamada antes e depois do PostBack.

    Fiz mais alguns testes e percebi que o erro acontece pq ao carregar a página depois do PostBack, a página quer selecionar um dos radioButtons da lista com base no valor selecionado anteriormente, para manter o estado da página anterior.

    Como não há nenhum radio na lista com o valor correspondente, pois ele foi repopulado com outras alternativas para a próxima pergunta, exibe a msg do validator.

    Tentei colocar .SelectedValue = "", .SelectedValue = Nothing, mas nada resolveu.

    Obrigada!

    quinta-feira, 8 de maio de 2008 02:21
  • Olá, Vivi!

    Fiz alguns testes usando o método Dispose() e a propriedade IsValid() dentro de um if IsPostBack no page_load e não consegui resolver.

    Porém, o que deu certo foi o seguinte: se o método RadioButtonList1.ClearSelection() for chamado dentro do page_load, o validador já carrega disparando a validação. Porém, se o método for chamado na rotina do botão, a validação não dá problema.

    Verifique em que parte do seu código você está limpando a seleção do controle e poste os resultados.

    Um abraço.
    quinta-feira, 8 de maio de 2008 13:34
  • Olá João,

    Fiz mais alguns testes mas mesmo usando o .ClearSelection() no botão não funcionou corretamente.

    Encontrei uma solução que provavelmente não é a ideal, mas resolveu o problema: troquei o controle RequiredFieldValidator por um Label e fiz o seguinte depois do PostBack:

    If rdButtonList.SelectedValue() = "" Then

    lblValidator.Visible = True

    Else

    lblValidator.Visible = False

     

    'executa a gravação do resultado e exibe próxima questão na tela

    End if

     

     

    Obrigada pela ajuda!

    quinta-feira, 8 de maio de 2008 14:07