validate net mvc data custom bootstrap asp annotation c# asp.net .net validation

c# - net - ¿Debo llamar siempre a Page.IsValid?



mvc required field validation (3)

Es posible que aún quieras llamarlo, porque en el futuro sus controles de validación podrían ser. Sé que este tipo de funciones se basa en agregar funcionalidades basadas en requisitos futuros, pero también se está protegiendo contra la necesidad de saber si la página es válida y de no pasar por todos los controladores de eventos, etc., para asegurarse de que esté allí si un validador sí obtiene adicional. Tenemos una regla que siempre lo agregamos, por lo que no tenemos ese problema de no validar en el futuro.

Sé que nunca debo confiar en las aportaciones de los usuarios, ya que las indeseables podrían comprometer la integridad de la aplicación de alguna manera, ya sea accidental o intencional; sin embargo, ¿existe un caso para llamar a Page.IsValid incluso cuando no hay controles de validación en la página (una vez más, sé que es una mala práctica confiar en la entrada del usuario al omitir la validación)? ¿Realiza Page.IsValid algún otro tipo de validación? Busqué en MSDN y los documentos parecen sugerir que Page.IsValid solo es efectivo si hay controles de validación en la página o si se ha llamado al método Page.Validate. Un amigo mío me sugirió que siempre verificara Page.IsValid en los controladores de clic de botón cada vez, incluso si no hay controles de validación o llamadas explícitas de Page.Validate.


Puede verificar la validez de una página revisando la propiedad Page.IsValid, su propósito para verificar la página. IsValid puede variar como

  • Si tiene Validators que tiene la propiedad EnableClientScript establecida en false
  • Si tiene un validador validado del lado del servidor .
  • Antes de realizar una operación crítica en el cuerpo del controlador de eventos de PostBack como Guardar , Eliminar , Autenticar ...
  • Hacer / mostrar cosas diferentes dependiendo de la validez de la página ...
  • Cualquier cosa que se te ocurra ...

Entonces, ¿cuándo / dónde puede llamar a Page.IsValid

  1. Si la pagina esta en post back
  2. Si la devolución es causada por un control de entrada con la propiedad CausesValidation establecida en verdadero .
  3. Después de realizar una llamada al Page.Validate , es decir, después del evento Page.Load .

Puede verificar Page.IsValid en el ciclo de vida de la página si el lugar / hora invocado cumple con los criterios anteriores; de lo contrario, el Page.IsValid dará como resultado la excepción System.Web.HttpException .

Debes usar Page.IsValid donde tenga sentido ; como en los controladores de eventos de devolución de datos de los controles de entrada (con CausesValidation = true) y requiere que el estado de la página sea válido para realizar su tarea correctamente. (Si tiene los validadores validados del lado del servidor o los validadores con la validación del lado del cliente desactivada, se convierte en un DEBER ).

protected void btnSave_Click(object sender, EventArgs e) { //Note that there might be ServerSideValidation which evaluated to false. if (!Page.IsValid) return; CurrentEntity.Save(); }

Finalmente, tenga en cuenta que Page.IsValid solo comprueba si hay errores de validación en los controles del validador de su página, todo depende de lo que hagan los controles de su validador.


Sería el primero en decirle que " Todos los comentarios son malos hasta que se demuestre lo contrario " . Sin embargo, en este caso, creo que su amigo está equivocado porque, por su lógica, probablemente podríamos encontrar otras cien propiedades que deberían ser revisado o configurado, aunque los valores predeterminados están bien.

La comprobación de Page.IsValid solo tiene sentido si tiene un escenario "CausesValidation": un botón que envió el formulario tiene su propiedad CausesValidation establecida en True. Esto llamaría automáticamente a Page.Validate y todos los controles de Validación pertenecientes al mismo ValidationGroup se verificarían para verificar su validez.

Editar:

Solo lo verifiqué usando Reflector y la función siempre devolverá True si la página no tiene ningún Validators (ValidatorCollection es nulo).