Annotation de données MVC - Le champ obligatoire ne fonctionne pas
-
06-07-2019 - |
Question
Bonjour, j'ai la morue suivante dans mon application, mais avec seulement deux champs, cela ne fonctionne pas.
[Required]
public string DevelopmentPM { get; set; }
Le test suivant s'exécute et réussit:
[TestMethod]
public void SiteConstruction_MODEL_DevelopmentPM_Is_Required()
{
//arrange
var propertyInfo = typeof(SiteConstructionMetadata).GetProperty
("DevelopmentPM");
//act
var attribute = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute),
true).Cast<RequiredAttribute>().FirstOrDefault();
//assert
Assert.IsNotNull(attribute);
}
Mon contrôleur ressemble à:
TryUpdateModel(siteConstruction);
if (!ModelState.IsValid)
return View(siteConstruction);
J'ai d'autres champs obligatoires dans le modèle et ils sont corrects. Ce champ est nul (j'ai vérifié) mais ne rend pas le modèle invalide - donc pas de validation et une erreur lors de la sauvegarde.
Ma vue
<li>
<label for="DevelopmentPM">
<strong>Development PM:</strong></label>
<%= Html.TextBox("DevelopmentPM") %>
<%= Html.ValidationMessage("DevelopmentPM", "*") %>
</li>
J'ai regardé mon .dbml (Linq à SQl), l'orthographe est correcte.
Il me manque quelque chose de simple, je vous en prie, devenir fou.
Merci
Davy
La solution
[MetadataType (typeof (SiteConstructionMetadata))] au-dessus de ma classe partielle, je l'ai pris pour acquis que je l'avais là.
La prochaine fois, au lieu d’envoyer des extraits, je pense que je vais tout poster - tout simplement, nous l’avons très vite remarquée.
Davy
Autres conseils
Assurez-vous également que DataAnnotationsModelBinder
est également le classeur de modèle par défaut. Ajoutez ce qui suit dans votre Global.asax.cs
:
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
et assurez-vous que vous avez référencé l'assembly System.ComponentModel.DataAnnotations.dll
dans votre projet. Voir ce didacticiel pour plus de détails.