有一个类(精简版):
public class Parameter
{
public Guid Id { get; set; }
public decimal Value { get; set; }
}
在我看来,我有一个参数字典,它们呈现如下:
<input ... name="Parameters[3].Key" type="hidden" value="UniqueParamName" />
<input ... name="Parameters[3].Value.Id" type="hidden" value="395816ad-dfde-11e1-8c36-848f69f05f09" />
<input ... name="Parameters[3].Value.Value" type="text" value="75" />
验证规则将由用户通过一些 GUI 设置并存储在数据库中。我想通过for currentValidationAttribute
从数据库中获取 s ,但我看不到任何方法。我还尝试在其中添加属性,其中可以通过一些 [讨厌的] 反射访问容器,但是在为“值”创建元数据时尚未分配“Id”(无论如何,它不可靠)。也许我把整个事情复杂化了,我只想坚持内置的验证。Parameter.Id
Parameter.Value
ModelMetadataProvider.CreateMetadata
public class ExtendedValidationProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(
ModelMetadata metadata,
ControllerContext context,
IEnumerable<Attribute> attributes)
{
if (metadata.ContainerType == typeof(Parameter)
&& metadata.PropertyName == "Value")
{
Guid parameterId = <some magic code>;
IEnumerable<Attribute> validationAttributes
= db.GetValidationAttributesByParameterId(parameterId);
return base.GetValidators(metadata, context, validationAttributes);
}
return Enumerable.Empty<ModelValidator>();
}
}