加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 可以在运行时更改数据注释吗? (ASP.NET MVC的[R

发布时间:2020-12-15 23:54:34 所属栏目:asp.Net 来源:网络整理
导读:通常,类成员的ModelBinding验证可能就像这个例子一样: public Class someclass{ [StringLength(50)] public string SomeValue { get; set; }} SomeValue最多限制为50个字符. 是否可以在运行时将常量(50)更改为其他内容,例如,在构造该类的每个实例期间,以便
通常,类成员的ModelBinding验证可能就像这个例子一样:
public Class someclass
{
    [StringLength(50)]
    public string SomeValue { get; set; }
}

SomeValue最多限制为50个字符.

是否可以在运行时将常量(50)更改为其他内容,例如,在构造该类的每个实例期间,以便可以使用具有不同StringLength限制的不同实例?

如果是这样,那怎么做呢?

解决方法

是.但唯一的方法是创建自己的DataAnnotationsModelValidatorProvider实现,然后在Global.ascx.cs中注册它.你不能简单地在运行时删除属性但是中断读取它们的MVC内部:
public class ConventionModelValidatorProvider : DataAnnotationsModelValidatorProvider
{
    protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata,ControllerContext context,IEnumerable<Attribute> attributes)
    {
        List<Attribute> newAttributes = new List<Attribute>(attributes);
        if( mycondition == true )
        {
            //get rid of the existing attribute
            newAttributes.Remove(newAttributes.OfType<StringLengthAttribute>().First());


            //add a new one 
            newAttributes.Add( new StringLengthAttribute(5324));
        }

        return base.GetValidators(metadata,context,newAttributes);
    }
}

寄存器:

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add( new CustomValidatorProvider() );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读