Опитвам се да заменя 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; }
}
без успех.
Трябваше да заобиколя това ограничение, но искам да разбера този механизъм на анотациите към данни, за да мога да ги използвам по-добре.