MVC4必需如果未在ModelMetaData中显示为IsRequired

时间:2012-09-17 20:21:35

标签: validation asp.net-mvc-4 metadata requiredfieldvalidator

我的模型上有一些验证元数据:

 [RequiredIf("IsNewCustomer", true, ErrorMessage="Tax ID is missing")]
    public string TaxIDNumber { get; set; }

我还有标准的LabelHelper代码,可以将星号放在任何必填字段旁边。

   if (displayOptions == DisplayOptions.ShowRequired && metadata.IsRequired )
        {
            //... add span html
        }

如果元数据标签是[必需],则此代码可以正常工作。但是,如果我使用RequiredIf或RequiredIfTrue,则isRequired属性始终设置为false。然而,验证仍然有效。模型状态无效,并显示错误消息。

我尝试为DataAnnotationsModelMetadataProvider创建自定义覆盖:

        protected override ModelMetadata CreateMetadata(System.Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var _default = base.CreateMetadata(attributes, containerType, modelAccessor,                       modelType, propertyName);
        _default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
        return _default;
    }

但是,在调用验证片段之前,这些代码都不会运行,因此在表单尝试发布之前不会更新元数据。

任何想法如何在页面加载时更新动态必需标记的元数据,以便我的必填字段指标仍然有效?

0 个答案:

没有答案