Validation côté client de MVC 3 lors de la collecte avec des annotations de données – ne fonctionne pas

J’essaie de faire valider la validation côté client pour mon modèle. Jusqu’à présent, cela ne fonctionne pas.

Mon modèle a une propriété qui est une collection:

public class NewsEventsModel { public List newsItems { get; set; } public int pageNumber { get; set; } public int totalPages { get; set; } public bool canManageNews { get; set; } public long userID { get; set; } } 

et NewsItemDetails est défini comme suit:

 public class NewsItemDetails { public long itemID { get; set; } public long postedByID { get; set; } public DateTime datePosted { get; set; } [Required(ErrorMessage = "Please enter news or event text")] [SsortingngLength(100)] [RegularExpression(RegExpressions.freeTextRessortingct)] public ssortingng newsBody { get; set; } [SsortingngLength(50)] [RegularExpression(RegExpressions.freeTextRessortingct)] public ssortingng newsTitle { get; set; } } 

J’envoie NewsEventsModel à la vue. Ensuite, à mon avis, j’inclus

   

Puis dans le code de vue j’ai

  for (int j = 0; j < Model.newsItems.Count(); j++) { /// bunch of stuff // then: 
@Html.TextAreaFor(model => model.newsItems[j].newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" }) @Html.ValidationMessageFor(model => model.newsItems[j].newsBody)
}

Mais lorsque je supprime tout le texte de la zone de texte et que je clique sur Enregistrer, le message “obligatoire” n’apparaît pas. Aucun message n’apparaît lorsque je ne respecte pas l’une des autres règles.

Cependant, la validation côté client fonctionne si je mets une annotation de validation sur l’une des propriétés de NewsEventsModel de niveau supérieur, puis l’inclut en tant que zone de texte dans la vue. Cela ne fonctionne tout simplement pas pour la classe NewsItemDetails de niveau inférieur.

Qu’est-ce que j’oublie ici?

Essayez d’utiliser des modèles d’éditeur dans votre vue:

 @Html.EditorFor(x => x.newsItems) 

et dans ~/Views/Shared/EditorTemplates/NewsItemDetails.cshtml :

 @model AppName.Models.NewsItemDetails // bunch of stuff // then: 
@Html.TextAreaFor(model => model.newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" }) @Html.ValidationMessageFor(model => model.newsBody)