1

ドロップダウン リストの要素に割り当てられた値を検証するにはどうすればよいですか? 通常、モデルに範囲を割り当て、そのフィールドを検証します。ただし、このようなものがある場合、どのように処理すればよいかわかりません。

モデル

public class Product
{
   public int Id { get; set; }
   public string Name { get; set; }
   public decimal Value { get; set; }
   public DateTime Given { get; set; }
   public TimeSpan TimeGiven { get; set; }
   public string Phase { get; set; }
   public bool Active { get; set; }
   public int PersonId { get; set; }
}

モデル内の名前は、さまざまな製品のドロップダウン リストです。製品ごとに範囲が異なるため、値の検証を処理する方法がわかりません。たとえば、製品名 X の有効範囲は 25 ~ 30 で、製品 Y の有効範囲は .01 ~ .5 です。Person には多くの製品を割り当てることができるので、Person と Product で 1 対多の関係を設定します。

X、Y を選択した製品に基づいて値を検証する方法はありますか? 約 40 種類の製品を扱う予定なので、理想的には、製品ごとに個別のモデルを用意する必要なくこれを行うことができます。

4

1 に答える 1

1

カスタム ビジネス ルールを使用して検証できます。ValidationAttribute

次の手順を実行するだけで、非常に簡単です。

  1. メソッドを継承しValidationAttributeてオーバーライドするクラスを作成しますIsValid
  2. 作成したばかりの属性でプロパティを装飾します。

例えば:

[AttributeUsage(AttributeTargets.Property, AllowMultiple =false, Inherited = false)]
public class MyBusinessRuleValidation: ValidationAttribute
{
  protected override ValidationResult IsValid(object v, ValidationContext validationContext)
  {        
    var Name = (string)v //since we decorated the property Name with this attribute;
    //retrieve Value's value using validationContext
    var value = (decimal) validationContext.ObjectType.GetProperty("Value").GetValue(validationContext.ObjectInstance, null);

    //check whether you need to exit with error
    if( name == ProductX) { 
      if(value > 10 && value < 25) 
        return new ValidationResult(ErrorMessage);

    }          

    return ValidationResult.Success;
  }
}

バリデーターを使用します。

public class Product
{
   public int Id { get; set; }
   [MyBusinessRuleValidation(ErrorMessage="Some ugly error")]      
   public string Name { get; set; }
   ....
}
于 2013-03-04T20:10:56.380 に答える