c# asp.net-mvc data-annotations

c# - ¿Qué significa que una propiedad sea[Obligatoria] y anulable?



asp.net-mvc data-annotations (4)

¿Qué significa que una propiedad sea [Required] y anulable? (ejemplo a continuación) Parece que si es [Required] no podría ser null (sin valor), y si puede ser null , no podría ser [Required] .

[Required] public DateTime? OrderDate { get; set; }


Es anulable, por lo que el formulario no muestra un valor inicial como 0001-01-01T00:00:00 que no tiene significado.

Se requiere forzar al usuario a ingresar algo.


La razón para hacer que una propiedad sea anulable y marcada con el atributo [Required] es para protegerse contra los ataques por debajo de la publicación. También le permite mostrar un valor vacío inicial en la vista en lugar del valor predeterminado de la propiedad. Esto normalmente se hace con propiedades de tipo de valor en los modelos de vista.

Un ataque de publicación insuficiente es cuando un usuario malintencionado modifica la solicitud para omitir un valor para la propiedad en la solicitud. Si la propiedad era DateTime (no anulable), DefaultModelBinder inicializará el valor predeterminado ( 01/01/0001 ) y no se ModelState ningún error ModelState . Como resultado, ese valor puede guardarse aunque no sea lo que espera.

Si la propiedad es DateTime? (anulable) y [Required] , si un usuario malintencionado omitió la propiedad en la solicitud, se ModelState un error ModelState porque se espera un valor en la solicitud y la vista se devolverá, por lo tanto, los datos no válidos no ser salvado.

Consulte también el artículo de Brad Wilson Validación de entrada versus Validación de modelo en ASP.NET MVC y la sección titulada El problema de "publicación insuficiente" .


Se required para la validación del cliente, pero se puede nullable para la asignación de DB


Se requiere una anotación de datos para la vista. La vista requerirá que tenga un valor antes de aceptar una publicación de formulario.

Que el valor sea anulable está relacionado con lo que está permitido en la base de datos. Un valor puede ser nulo en la base de datos o puede persistir como nulo.

Son aspectos separados.