gpt4 book ai didi

.net - 是否可以覆盖 .NET 子类中的 DataAnnotation 属性?

转载 作者:行者123 更新时间:2023-12-04 16:49:53 27 4
gpt4 key购买 nike

我正在尝试覆盖子类中的 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; }
}
}

此示例有效,因此使用第一个对象的表单将给出客户端验证错误 “金额必须介于 1 和 999,999,999”,第二个将显示 ”金额必须介于 1 到 2,000"

但是,如果我想让子类完全没有任何验证:

public class ExtendedViewModel : BaseViewModel
{
internal decimal? _amount;

public override decimal? Amount {
get { return _amount; }
set { _amount = value; }
}
}

使用这个的表单仍然会给客户端验证错误“金额必须在 1 到 999,999,999 之间”,它以某种方式从父级继承。

所以我们可以覆盖属性但我们不能摆脱它们?还有别的办法吗?

我也试过:

    new public decimal? Amount {
get { return _amount; }
set { _amount = value; }
}

没有成功。

我不得不解决这个限制,但我想了解这种数据注释机制,以便更好地使用它们。

最佳答案

好吧,在属性类上有一个 AttributeUsageAttribute...。

例如,RangeAttribute 看起来像那样

[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter, AllowMultiple = false)]
public class RangeAttribute : ValidationAttribute

AttributeUsageAttribute 类的属性之一是Inherited,看起来像这样。

    //
// Summary:
// Gets or sets a Boolean value indicating whether the indicated attribute can
// be inherited by derived classes and overriding members.
//
// Returns:
// true if the attribute can be inherited by derived classes and overriding
// members; otherwise, false. The default is true.
public bool Inherited { get; set; }

因此,正如我们在 RangeAttribute 的定义中看到的,Inherited 属性不存在于属性中。所以默认情况下它是真的,所以属性是在覆盖成员上继承的。

关于.net - 是否可以覆盖 .NET 子类中的 DataAnnotation 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com