O que você suspeitar quando ASP.NET ignora um CustomValidator?
-
07-07-2019 - |
Pergunta
Este é tanto problema de manutenção de código a como um problema de código, mas eu tenho um formulário da Web que nenhuma verificação mais tempo CustomValidator. Ele trabalhou quando eu última tocou o código mais de um ano atrás, mas ele não funciona mais agora que o usuário solicitou algumas mudanças ...
O WebForm contém um drop down ligados a dados com um padrão "- Todos -" ponto com String.Empty como seu valor. Quando o usuário clica no botão enviar, o validador deve verificar que o valor do drop-down não é String.Empty. Eu definir pontos de quebra no código do cliente validação e o código de validação do servidor, mas nenhum fogo.
Onde você começar a procurar? Quais são os suspeitos do costume? Eu, é claro, em comparação a minha cópia de trabalho para o que está no controle de origem, mas nada salta para fora como sendo suspeito.
Apenas no caso que interessa, aqui está o meu código:
<asp:DropDownList ID="_AssessmentDropDown" runat="server" DataSourceID="_AssessmentsData" CausesValidation="true" AutoPostBack="false"
DataTextField="AssessmentName" DataValueField="AssessmentName" OnDataBound="_HandleAssessmentsBound">
</asp:DropDownList>
<asp:CustomValidator ID="_AssessmentValidator" runat="server" ClientValidationFunction="_HandleValidateAssessment_Client"
ControlToValidate="_AssessmentDropDown" ErrorMessage="* You must select an Assessment."
OnServerValidate="_HandleValidateAssessment" />
<asp:ObjectDataSource ID="_AssessmentsData" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetData"
TypeName="DataTableAdapters.GET_GRADE_ASSESSMENTSTableAdapter">
<SelectParameters>
<asp:ControlParameter Name="GRADECODE" ControlID="_GradeCodeDropDown" PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
Solução
Eu noto um par de questões
- eu não acho que você precisa de um CausesValidation = true se AutoPostBack é definida como false
- Você não usa grupos de validação, de modo que não pode ser a causa
- Por que não usar um RequiredFieldValidator?
- Se você quiser validação fogo em campos vazios, defina a propriedade ValidateEmptyText para true
Outras dicas
A CustomValidator não é acionado se o controle que está validando tem um valor vazio, assim que um CustomValidator deve sempre ser acompanhado por RequiredFieldValidator
Alguns solução de problemas etapas:
- Este é o único validador no formulário?
- é a validação ativada na página?
- É validação habilitado para o controle alvejado?
- é o próprio validador habilitado?
Gostaria de ter um olhar sério na ValidationGroup.
Se alguma coisa foi deixada de fora do grupo, ele não validar mais. Caso contrário, certifique-se de que você não tem qualquer erro javascript (para o lado do cliente) e que o método que é "OnServerValidate" tem um interior ponto de ruptura.
É o validador no mesmo grupo validador como o botão enviar?