2010-11-29 3 views
3

Warum funktionieren DataAnnotations nicht in öffentlichen Feldern? Beispiel:DataAnnotations für öffentliche Felder und Eigenschaften in 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) 

Wenn Titel ein Feld ist, dann ist das Display-Attribut scheint keine Wirkung zu haben. Wenn Titel zu einer Eigenschaft geändert wird, funktioniert es wie erwartet, wenn "Name" angezeigt wird.

Es wäre in diesem Beispiel einfach, nur zu einer Eigenschaft zu wechseln, aber ich versuche, die Typen aus F # zu verwenden, wo sie in eine Klasse mit Feldern und nicht Eigenschaften kompiliert werden.

Dies wurde in ASP.NET 4 und MVC RC getestet 3.

Antwort

2

Der Grund, warum DataAnnotations funktionieren nicht mit Feldern ist, weil die Reflexion-ähnlichen Mechanismus, der verwendet wird, um die Attribute (TypeDescriptor) nur zum Abrufen Eigenschaften unterstützt .

Es wäre zwar nicht einfach, aber wir könnten prüfen, ob dies mit Feldern funktioniert, wenn genug Nachfrage besteht.

+0

Der JSON-Serializer in MVC gibt sowohl die Felder als auch die Eigenschaften zurück, nicht sicher, warum Felder für Anmerkungen unterschiedlich behandelt werden. – yanta

+0

Das ist eine Diskrepanz zwischen Teilen des .NET-Frameworks. DataAnnotations wird standardmäßig nur für Eigenschaften unterstützt (obwohl Sie auch einen MetadataProvider schreiben könnten, der auch Felder inspizieren kann). Auf der anderen Seite unterstützt die JavaScript-Serialisierung sowohl Felder als auch Eigenschaften. So ist es gerade jetzt. – marcind

Verwandte Themen