クラスがあります(簡素化されたバージョン):
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 currentでValidationAttribute
データベースから 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>();
}
}