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.