Existe uma maneira elegante para comparar uma caixa de seleção e uma caixa de texto usando validadores do ASP.NET?

StackOverflow https://stackoverflow.com/questions/88361

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu tenho um repetidor de Asp.Net, que contém uma caixa de texto e uma caixa de seleção. Eu preciso adicionar validação do lado do cliente que verifica que, quando a opção for assinalada, a caixa de texto só pode aceitar um valor de zero ou em branco.

Eu gostaria de usar um ou mais dos controles de validação do ASP.NET para alcançar este objetivo, para fornecer uma exibição consistente para erros do lado do cliente (erros do lado do servidor são manipulados por outro subsistema).

O Asp: CompareValidator não parece ser suficiente flexível para realizar esse tipo de comparação complexa, por isso estou esquerda olhando para o Asp:. CustomValidator

O problema que eu estou correndo em é que não parece haver nenhuma maneira de passar informações personalizadas para a função de validação. Este é um problema porque os clientIds da caixa de seleção e caixa de texto são desconhecidos para mim em tempo de execução (como eles são parte de um Repetidor).

Então ... Minhas opções parecem ser:

  1. Passe a caixa de texto e caixa de seleção para o CustomValidator de alguma forma (não parece ser possível).
  2. Encontre o TextBox através de JavaScript com base nos argumentos passados ??pelo CustomValidator. Isso é possível, o que com o ClientId sendo ambígua?
  3. Esqueça validação inteiramente, e costume emitem JavaScript (permitindo-me para passar ambos clientIds para uma função personalizada).

Algumas ideias sobre o que poderia ser uma melhor maneira de implementar isso?

Foi útil?

Solução

Eu acho que a melhor forma seria a de BaseValidator herdar de uma nova classe, e passar esses IDs ao seu controle como atributos. Você deve ser capaz de resolver os IDs dentro do seu validador, sem saber o ID do lado do cliente completo que é gerado em tempo de execução. Você deve obter os dados de validação no servidor primeiro e no segundo cliente.

Outras dicas

Você não pode colocar o CustomValidator dentro do repetidor? Se não, você pode criá-lo dinamicamente quando o repetidor está ligado eo usuário FindControl ()

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

... ou algo parecido. Eu fiz o código em cima da minha cabeça.

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