J'ai un modèle complexe avec des objets imbriqués. Je veux seulement que mon [Required]
les attributs doivent être validés lorsque l'objet sur lequel ils se trouvent n'est pas null
. Ainsi, par exemple, si j'ai un Home
avec une classe Address
la propriété Home.Address.Street
ne doit être que [required]
si le Address
n'est pas null
.
Code
Dans ASP.NET Core, j'ai un modèle qui ressemble à ceci :
public class Home
{
[Required]
public int Number {get;set;}
public Address Address {get;set;} // This is not required
}
public class Address
{
[Required]
public string Street {get;set;}
public IFormFile Picture {get;set;}
}
Dans un contrôleur, j'ai une méthode d'action qui ressemble à ceci :
[HttpPost]
public string AddHomes([FromForm]List<Home> homes)
{
if(!ModelState.IsValid)
{
return BadRequest();
}
// Do some saving
return Ok();
}
Et la charge utile du formulaire ressemble à ça :
homes.Index: 0
homes[0].number: 1
Dans ASP.NET Core 2.2, le premier bouton Home
dans le homes
est marquée comme invalide, mais elle fonctionnait comme prévu dans ASP.NET Core 2.1.
Ce que je veux, c'est que le [Required]
pour qu'il ne soit validé que si l'attribut Address
n'est pas null
. Donc un Home
peut soit ont un Address
con un Street
ou no Address
du tout.
Est-ce réalisable dans .NET Core 2.2 ?
Nota: J'ai inclus un exemple mis à jour ci-dessous pour reproduire l'erreur. Il semble que l'inclusion de
IFormFile
provoque leAddress
pour s'initialiser.
{
"errors": {
"homes[0].Address.Street": [
"The Street field is required."
]
},
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "80000009-0003-ff00-b63f-84710c7967bb"
}
J'ai également ouvert une question sur GitHub à ce sujet il y a quelque temps, si quelqu'un veut y donner suite : L'inclusion de la propriété IFormFile oblige à valider l'ensemble de l'objet. ASP.NET Core 2.2 .