2012-02-21 8 views
6

私のプロジェクトで属性の検証を使用しています。C#で動的に属性を設定/削除するには?

[Required(ErrorMessage = "DepartmentCode is Required")] 
public string DepartmentCode { get; set; } 

場合によってはDepartmentCodeは必須ではありません。私の場合、どのように検証を動的に無視できますか?

+0

場合によっては必須ではない場合、なぜ属性を設定しますか?属性は静的なので、プロパティなどを作成しないのはなぜですか? –

+1

あなたのコードでは、* departmant *と呼ばれるかもしれませんが、あなたのエラーメッセージは間違いなくそれを* department *と呼ぶべきです。 – spender

+0

@ H.B.実際、私のビジネスはあるケースで変わった....別のケースでは、このプロパティが必要です... –

答えて

0

あなたのモデルからRequiredAttributeを削除し、コントローラにヒットしたら、それをチェックし、必要でないものがあればチェックします。

それはそれが必要な場合に該当すると値が記入されていない場合は、手動で

ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");

あなただけのクライアント側このように検証を失うことになるにModelStateにエラーを追加

1

を見てみましょう:Remove C# attribute of a property dynamically

をとにかく私は適切な解決策がRequiredAttributeから属性を継承し、をオーバーライドすることだと思います210メソッド(フィールドが必要かどうかを確認できるようになります)。クライアント側の検証を継続したい場合は、CompareAttributeの実装をチェックしてください。

0

次の記事では、この(あまりにもクライアント側の検証とMVC3)を示しています。

public string NonMandatoryDepartmentCode 
{ 
    get 
    { 
     return DepartmentCode; 
    } 
    set 
    { 
     DepartmentCode = value; 
    } 
} 

基本モデルが継承した属性が継承していた場合、このアプローチをMVCに使用しました。

関連する問題