2010-11-29 11 views
3

DataAnnotationがパブリックフィールドで機能しないのはなぜですか?例:パブリックフィールドのDataAnnotationsと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) 

TitleがDisplay属性の場合は無効です。タイトルがプロパティに変更された場合、 "Name"と表示されているように期待どおりに機能します。

この例ではプロパティに変更するのは簡単ですが、F#の型を使用して、フィールドとプロパティを持つクラスにコンパイルします。

これは、属性(TypeDescriptor)を取得するために使用される反射のようなメカニズムは、プロパティのみをサポートしているので、DataAnnotationsは、フィールドで動作しない理由があるASP.NET 4とMVC RC 3

答えて

2

で試験しました。

これは簡単ではありませんが、十分な需要がある場合はフィールドでこの作業を行うことができます。

+0

MVCのJSONシリアライザでは、フィールドとプロパティの両方が返されますが、アノテーションでフィールドが異なる扱いを受ける理由はわかりません。 – yanta

+0

これは、.NETフレームワークの一部が一致しないためです。 DataAnnotationsは、デフォルトではプロパティでのみサポートされています(ただし、フィールドを検査できるMetadataProviderを記述することもできます)。一方、JavaScriptのシリアル化は、フィールドとプロパティの両方をサポートしています。それはちょうど今のやり方です。 – marcind

関連する問題