2013-06-13 2 views
2

Я украсил класс с:Можно ли использовать обязательный атрибут ValidationAttribute со значениями?

[Required(ErrorMessage = "Price is required.")] 
public decimal Price { get; set; } 

Но при проверке его с кодом:

for each (PropertyInfo prop in Me.GetType().GetProperties()) 
    { 
     if (prop.GetIndexParameters().Length = 0) 
     { 
      for each (ValidationAttribute validatt in prop.GetCustomAttributes(GetType(ValidationAttribute), True)) 
      { 
       if (!validatt.IsValid(prop.GetValue(Me, Nothing)) 
       { 
        retval.Add(New PropertyValidationError(prop.Name, string.Format("There is a problem with the {0} property. It is flagged with the {1}", prop.Name, validatt.GetType.Name), validatt.ErrorMessage)); 
       } 
      } 
     } 
    } 

Я нахожу, что значение 0 обращаются как выполняя «requiredness», это не то, что я намеревался (на самом деле, я хотел разрешить любое значение , отличное от ноль) - это мой код проверки, делающий неправильную вещь, или есть способ использовать украшение с ValidationAttribute, которое не будет выполнено для значений по умолчанию для типов значений?

ответ

4

Когда вы используете тип значения, такие как decimal, это невозможно не иметь значение. Как таковой, этот атрибут фактически бессмыслен.

Было бы лучше использовать [Range], так как это позволяет указывать значащие значения. Однако это не позволит вам обрабатывать «любое ненулевое значение» (хотя вы можете легко обрабатывать любое положительное ненулевое значение).

Ваши критерии, как указано, потребуют создания custom validation attribute для проверки, поскольку «любое значение, отличное от значения по умолчанию (T)», не является встроенной проверкой.

+0

Учитывая, что я хочу иметь * любое значение, отличное от нуля *; Похоже, мне нужно создать собственный атрибут? –

+0

@RowlandShaw Yeah - Если вы хотите «любое положительное значение», вы можете использовать '[Range]', но для любого значения вам нужен специальный атрибут проверки. –

1

Использовать атрибут проверки диапазона.

[Range(min, max, ErrorMessage)] 
Смежные вопросы