0

Предположим, у меня есть свойство сущности, как:как написать ненулевое выражение для аннотации в метаданных для службы wcf ria?

public decimal Amount { get; set; } 

то проверка может быть добавлен в класс метаданных, как:

[Range(0.01, double.MaxValue, ErrorMessage = "Amount is required")] 
public decimal Amount { get; set; } 

Как о для ненулевого запроса?

ответ

2

Вы можете реализовать пользовательский атрибут проверки. Пример:

class MyObject { 
    [NonZero] 
    public decimal Amount { get; set; } 
} 

public class NonZeroAttribute : ValidationAttribute 
{ 
    public override string FormatErrorMessage(string name) 
    { 
     return string.Format("{0} must be non-zero", name); 
    } 

    public override bool IsValid(object value) 
    { 
     var zero = Convert.ChangeType(0, value.GetType()); 
     return !zero.Equals(value); 
    } 

    protected override ValidationResult IsValid(
     object value, ValidationContext validationContext) 
    { 
     if (IsValid(value)) 
      return new ValidationResult(null); 
     else 
      return new ValidationResult(
       FormatErrorMessage(validationContext.MemberName) 
      ); 
    } 
} 
+0

Не должен ли 'IsValid' возвращать' null' в качестве результата проверки, когда это значение действительно? –

+0

@RobertSirre Я не вижу этого нигде в документации, поэтому, если у вас есть источник, то, пожалуйста, дайте мне знать. Однако, просто просмотрев документы для 'ValidationResult', возможно, было бы правильнее возвращать' ValidationResult.Success' вместо вновь созданного результата с сообщением об ошибке. Я не тестировал это. – RogerN

+0

Правда, 'ValidationResult.Success' намного лучше! –