Pregunta

Esto es tanto un problema de mantenimiento de código como un problema de código, pero tengo un WebForm que ya no lo comprueba CustomValidator. Funcionó la última vez que toqué el código hace más de un año, pero ya no funciona ahora que el usuario ha solicitado algunos cambios ...

El formulario web contiene un menú desplegable vinculado a datos con un valor predeterminado " - Todos - " elemento con String.Empty como su valor. Cuando el usuario hace clic en el botón de envío, el validador debe verificar que el valor del menú desplegable no sea String.Empty. He establecido puntos de interrupción en el código de validación del cliente y el código de validación del servidor, pero ninguno se activa.

¿Dónde empezarías a buscar? ¿Cuáles son los sospechosos habituales? Por supuesto, he comparado mi copia de trabajo con lo que está en el control de código fuente, pero nada resulta sospechoso.

Por si importa, aquí está mi 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>
¿Fue útil?

Solución

Noto un par de problemas

  • No creo que necesite un CausesValidation = true si AutoPostBack está configurado en falso
  • No utiliza grupos de validación, por lo que esa no puede ser la causa
  • ¿Por qué no usar un RequiredFieldValidator?
  • Si desea activar la validación en campos vacíos, establezca la propiedad ValidateEmptyText en verdadero

Otros consejos

Un CustomValidator no se activa si el control que está validando tiene un valor vacío, por lo que un CustomValidator siempre debe ir acompañado de RequiredFieldValidator

Algunos pasos para solucionar problemas:

  • ¿Es este el único validador en el formulario?
  • ¿Está habilitada la validación en la página?
  • ¿Está habilitada la validación para el control dirigido?
  • ¿Está habilitado el validador?

Consideraría seriamente el Grupo de Validación.

Si algo se ha dejado fuera del grupo, ya no se validará. De lo contrario, asegúrese de que no tiene ningún error de JavaScript (para el lado del cliente) y que el método que es "OnServerValidate" tiene un punto de ruptura dentro.

¿Está el validador en el mismo grupo de validación que el botón de envío?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top