我的模型上有一些验证元数据:
[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;
}
但是,在调用验证片段之前,这些代码都不会运行,因此在表单尝试发布之前不会更新元数据。
任何想法如何在页面加载时更新动态必需标记的元数据,以便我的必填字段指标仍然有效?