2012-03-14 10 views
1

私は、MetadataType/buddyクラスを使用してMVC3のEntity Frameworkクラスで動作するDisplayName/Display属性を取得することに頭を悩ましました。私の見解では、@ Html.LabelForを使用すると、表示属性ではなくプロパティ名を取得するだけです。私のユースケースとセットアップは非常に単純です:MVC3のMetadataTypeバグ?

[MetadataType(typeof(ProductMetadata))] 
public partial class Product 
{ 
} 

public class ProductMetadata 
{ 
    [Display(Name = "Why does this not work????")] 
    object ProductName { get; set; } 

    [Display(Name = "Discontinued Date")] 
    object DiscontinuedDate { get; set; } 
} 

私はその後、LabelForのようなHTMLヘルパーを使用している場合:

@Html.LabelFor(m => m.First().ProductName) 

私はまだちょうど私の出力にプロパティ名を取得します。私は、カスタムのHTML拡張でプログラムこれを行う場合でも、私はちょうどextected属性値ではなく、プロパティ名を取得:この上

ModelMetadata.FromLambdaExpression(expression, html.ViewData).DisplayName 

任意のアイデアやヘルプをいただければ幸いです。私がここに欠けているものはありますか?

+0

MVC3バグではないと言わないでください。これは、誰かがこのようなバグを報告するのに十分長い間野生であった:)さらに、これは単純なusecaseです、それはQAを通過することは決してありません。 –

+0

私はそれが私が行方不明だったと思った。しかし、私は不思議だったプレビュー1のバグだった。面白いことに、何度もそのコードを見ても、プロパティのアクセスレベルが設定されていないことに気がつきませんでした。 – long2know

答えて

1

を使用してみてください。

public class ProductMetadata 
{ 
    [Display(Name = "It works!!!")] 
    public object ProductName { get; set; } 

    [Display(Name = "Discontinued Date")] 
    public object DiscontinuedDate { get; set; } 
} 
+0

Doh!それが問題でした。その男を見つけてくれてありがとう! – long2know

0

は性質がProductMetadataクラスでプライベートなので、それが動作していないDisplayNameAttribute

[DisplayName("Propertyname")] 
public string PropertyName {get;set;} 
+0

私はもう少し明確にすべきだった。 DisplayName属性とDisplay属性のどちらを使用しても同じ結果が得られます。 – long2know