1

Webサービスから生成された部分クラスがあります。ModelMetadata私はこのクラスに次のように追加します:

// Automatically generated code

public partial class MyClass
{
    public string FIELD_ONE ...
    public DateTime? FIELD_TWO ...
}

// My code

[MetadataType(typeof(MyMetaDataClass))]
public partial class MyClass
{
}

public class MyMetaDataClass
{
    [Display(Name="Field One")] 
    public string FIELD_ONE;

    [Display(Name="Field Two")] 
    public DateTime? FIELD_TWO;
}

MyClassここで、メタデータの表示属性を持つすべてのプロパティ、つまり、FIELD_ONEを取得したいと思いますFIELD_TWO

私は次のようなことを試しました

typeof(MyClass).GetProperties().Where(p => Attribute.IsDefined(typeof(DisplayAttribute))

ただし、もちろん、属性はのプロパティにはありませんMyClass。私も試しました:

ModelMetadata mmd = ModelMetadata.FromLambdaExpression(m => pi.GetValue(m, null), Html.ViewData);

しかし、「テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメーターのカスタムインデクサー式でのみ使用できます」というエラーが表示されます。

MyClassからに到達できればMyMetadataClass、そのプロパティ名を取得し、から同じ名前のプロパティを取得できる可能性がありますMyClass

これは可能ですか、それとも間違った木を吠えていますか?

4

1 に答える 1

2

あなたがやろうとしていることは正確には何ですか?デフォルトのメタデータ プロバイダーの動作をオーバーライドしたい場合はDataAnnotationsModelMetadataProvider、独自の実装に置き換えたほうがよいでしょう。コード例を次に示します。

http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/

ここでは、作成者が独自のカスタム属性のサポートを追加していますが、DisplayAttribute.

これが役に立たない場合は、何を達成しようとしているのかを詳しく教えてください。

于 2013-03-06T11:14:14.767 に答える