Я пытаюсь переопределить DataAnnotation в дочернем классе.
Я пробовал решения по аналогичным вопросам, но у меня был ограниченный успех.
Например, у меня есть этот класс, использующий RangeAttribute
public class BaseViewModel
{
[Range(1, 99999999, ErrorMessageResourceName = "NotInRange9M", ErrorMessageResourceType = typeof(Resources.Account))]
public virtual decimal? Amount { get; set; }
}
и дочерний класс:
public class ExtendedViewModel : BaseViewModel
{
internal decimal? _amount;
[Range(1, 2000, ErrorMessageResourceName = "NotInRange2K", ErrorMessageResourceType = typeof(Resources.Account))]
public override decimal? Amount {
get { return _amount; }
set { _amount = value; }
}
}
Этот пример работает, поэтому форма, в которой используется первый объект, выдаст ошибку проверки на стороне клиента "The amount must be between 1 and 999,999,999"
, а вторая — "The amount must be between 1 and 2,000"
.
Однако, если я хочу иметь дочерний класс вообще без какой-либо проверки:
public class ExtendedViewModel : BaseViewModel
{
internal decimal? _amount;
public override decimal? Amount {
get { return _amount; }
set { _amount = value; }
}
}
Форма, использующая это, по-прежнему будет выдавать ошибку проверки на стороне клиента "The amount must be between 1 and 999,999,999"
, которую она каким-то образом наследует от родителя.
Значит, мы можем переопределить атрибуты, но не можем от них избавиться? Есть ли другой способ?
Я также пробовал:
new public decimal? Amount {
get { return _amount; }
set { _amount = value; }
}
безуспешно.
Мне пришлось обойти это ограничение, но я хочу понять этот механизм аннотаций данных, чтобы лучше их использовать.