Pourquoi les DataAnnotations ne fonctionnent pas sur les champs publics? Exemple:DataAnnotations sur les champs publics vs les propriétés dans MVC
namespace Models
{
public class Product
{
[Display(Name = "Name")]
public string Title; // { get; set; }
}
}
public ActionResult Test()
{
return View(new Models.Product() { Title = "why no love?" });
}
@Html.LabelFor(m => m.Title) // will return 'Title' if field, or 'Name' if property
@Html.DisplayFor(m => m.Title)
Si le titre est un champ, l'attribut d'affichage semble avoir aucun effet. Si le titre est changé en propriété, cela fonctionne comme prévu et affiche "Nom".
Il semblerait facile dans cet exemple de simplement passer à une propriété, mais j'essaie d'utiliser les types de F # où ils sont compilés dans une classe avec des champs et non des propriétés.
Cela a été testé dans ASP.NET MVC 4 et RC 3.
Le sérialiseur JSON dans MVC renvoie à la fois les champs et les propriétés, pas sûr pourquoi les champs sont traités différemment pour les annotations. – yanta
C'est une discordance entre les parties du framework .NET. DataAnnotations est uniquement pris en charge sur les propriétés par défaut (bien que vous puissiez écrire un MetadataProvider qui pourrait également inspecter les champs). D'autre part, la sérialisation JavaScript prend en charge les champs et les propriétés. C'est juste comme ça en ce moment. – marcind