一部のロジックでは、モデルのプロパティを反復処理してプロパティを自動バインドする必要があり、機能を拡張して C# 4.0 の新しいデータ注釈を含めたいと考えています。
現時点では、基本的に、すべての ValidationAttribute インスタンスに読み込まれている各プロパティを繰り返し処理し、Validate/IsValid 関数を使用して検証しようとしていますが、これはうまくいかないようです。
例として、次のようなモデルがあります。
public class HobbyModel
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Do not allow empty strings")]
[DisplayName("Hobby")]
[DataType(DataType.Text)]
public string Hobby
{
get;
set;
}
}
属性をチェックするコードは次のとおりです。
object[] attributes = propertyInfo.GetCustomAttributes(true);
TypeConverter typeConverter =
TypeDescriptor.GetConverter(typeof(ValidationAttribute));
bool isValid = false;
foreach (object attr in attributes)
{
ValidationAttribute attrib = attr as ValidationAttribute;
if (attrib != null)
{
attrib.Validate(obj, propertyInfo.Name);
}
}
コードをデバッグしたところ、モデルには 3 つの属性があり、そのうちの 2 つは ValidationAttribute から派生していますが、コードが Validate 関数を (空または null 値で) 通過すると、期待どおりに例外がスローされます。
私はばかげたことをしていると思っているので、誰かがこの機能を使用して助けてくれるかどうか疑問に思っています.
前もって感謝します、ジェイミー