有人可以解释为什么假设非可空类型属性应该始终具有RequiredAttribue吗?
我正在尝试编写一个标签助手,它将自动附加*或更改css类,以便我可以向用户指出该字段是必需的。但是,在查询元数据时,不可为空的属性最终会带有必需的属性。
MVC源代码:
protected override IEnumerable<ModelValidator> GetValidators(
ModelMetadata metadata, ControllerContext context,
IEnumerable<Attribute> attributes)
{
_adaptersLock.EnterReadLock();
try
{
List<ModelValidator> results = new List<ModelValidator>();
if (metadata.IsRequired &&
!attributes.Any(a => a is RequiredAttribute))
{
//******* Why Do this?
attributes = attributes.Concat(new[] { new RequiredAttribute() });
}
foreach (ValidationAttribute attribute in
attributes.OfType<ValidationAttribute>())
{
DataAnnotationsModelValidationFactory factory;
if (!_adapters.TryGetValue(attribute.GetType(), out factory))
factory = _defaultFactory;
results.Add(factory(metadata, context, attribute));
}
return results;
}
finally
{
_adaptersLock.ExitReadLock();
}
}
答案 0 :(得分:2)
就个人而言,我认为这是因为框架的设计者已经错过了可以为空的数据!
看起来他们假设如果某个字段不可为空,则必须要求它。
不幸的是,正如你可能发现的那样,情况并非总是如此。
我能想到的最常见的一个例子是用户提供的文本字段,该文本字段可能是空白的,但是在用户提供值之前,您希望将其保持为NULL。在这种情况下,您会得到三个有效的案例:'Not Set'(NULL),'Empty'(非NULL)或实际值。
所以 - 回答你的问题,不 - 我无法解释。也许这是一个错误?