2012-04-25 13 views
1

現時点では、自分のmvcアプリケーション用に自分のValidationAttributeを作成しています。コンストラクタへのパラメータとしてenum /コンパイルされた値を渡す

次のValidationAttributeコードがあります。

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Parameter, AllowMultiple = false)] 
public class RecordAttribute: ValidationAttribute 
{ 

    public UniqueDataRecordAttribute(string primaryKeyProperty) 
    { 

    } 
} 

自分のプライマリプロパティのフィールド名を自分の属性に渡して、自分の妥当性検査を行います。 例えば:

[RecordAttribute("CustomerID")] 
public class CustomerMetaData 
{ 


} 

これは私のために動作しますが、主キーの名前が変更されます場合は、私が問題に実行されます。

プライマリキー属性を含む列挙型を作成しました。私は、コンパイラは私に言っている、それを渡すしようとすると、しかし:

を属性引数は定数式でなければならない、表現 または属性パラメータ型の配列作成式

TYPEOF私もこれを試してみましたアプローチ:Associating enums with strings in C#でも効果は同じです。

属性に列挙型(または他のコンパイル済みの値)を渡す可能性はありますか?

ありがとうございます

+0

をなぜ主キーの変更の名前だろう。そんなことを変えてしまわないように、あなたはその場で修正するのですか? –

答えて

0

このようなことをしようとしていますか?

[RecordAttribute(Keys.CustomerID.ToString())] 
public class CustomerMetaData 
{ 
} 

Keys.CustomerID.ToString()によって返された文字列が定数ではないため、動作しません。

列挙型の代わりに、静的クラスのconst文字列フィールドを使用できますか?

static class Keys { 
    public const string CustomerID = "CustomerID"; 
} 

その後、これは動作します:

[RecordAttribute(Keys.CustomerID)] 
public class CustomerMetaData 
{ 
} 
関連する問題