私のプロジェクトで属性の検証を使用しています。C#で動的に属性を設定/削除するには?
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
場合によってはDepartmentCodeは必須ではありません。私の場合、どのように検証を動的に無視できますか?
私のプロジェクトで属性の検証を使用しています。C#で動的に属性を設定/削除するには?
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
場合によってはDepartmentCodeは必須ではありません。私の場合、どのように検証を動的に無視できますか?
あなたのモデルからRequiredAttributeを削除し、コントローラにヒットしたら、それをチェックし、必要でないものがあればチェックします。
それはそれが必要な場合に該当すると値が記入されていない場合は、手動で
ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");
あなただけのクライアント側このように検証を失うことになるにModelStateにエラーを追加
を見てみましょう:Remove C# attribute of a property dynamically
をとにかく私は適切な解決策がRequiredAttribute
から属性を継承し、をオーバーライドすることだと思います210メソッド(フィールドが必要かどうかを確認できるようになります)。クライアント側の検証を継続したい場合は、CompareAttribute
の実装をチェックしてください。
検証を動的に追加および削除する代わりに、この目的に適した属性を作成する方が効果的です。私は、モデルでこの問題ラウンド持っているいくつかのケースでは、それは理想的ではないのですが、それは安いと最も簡単な方法です http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
:
次の記事では、この(あまりにもクライアント側の検証とMVC3)を示しています。
public string NonMandatoryDepartmentCode
{
get
{
return DepartmentCode;
}
set
{
DepartmentCode = value;
}
}
基本モデルが継承した属性が継承していた場合、このアプローチをMVCに使用しました。
場合によっては必須ではない場合、なぜ属性を設定しますか?属性は静的なので、プロパティなどを作成しないのはなぜですか? –
あなたのコードでは、* departmant *と呼ばれるかもしれませんが、あなたのエラーメッセージは間違いなくそれを* department *と呼ぶべきです。 – spender
@ H.B.実際、私のビジネスはあるケースで変わった....別のケースでは、このプロパティが必要です... –