验证和UiHint的复合属性

时间:2016-11-03 11:40:25

标签: c# .net asp.net-mvc

我有一个代表应付金额的房产'在许多不同的类。它们不共享公共基类或接口。

此属性具有以下规则:

  • 必须大于0
  • 必须是不超过2位小数的数值
  • 不得超过最大长度(默认为13)
  • 使用UI提示" Amount"
  • 添加最大长度的模型元数据

这个属性会在我负责的许多不同系统中出现很多,所以我希望有一个属性为" PayableAmountAttribute"这将封装所有这些功能。我知道我可以执行复合验证属性(以及元数据,通过实现IMetadataAware),但我很难过如何将UI提示作为其中的一部分包含在内属性。

有没有办法可以将验证属性和UIHint属性合并到一个属性中?

1 个答案:

答案 0 :(得分:0)

由于我正在实施IMetadataAware,因此我可以访问ModelMetadata的实例,这样我就可以设置TemplateHint属性:

public class PayableAmountAttribute : ValidationAttribute, IMetadataAware
{       
    public override bool IsValid(object Value)
    {
        // Implementation of looping through validation attributes
    }

    public void OnMetadataCreated(ModelMetadata Metadata)
    {
        Metadata.TemplateHint = "Amount";
        Metadata.AdditionalValues.Add("Amount.MaxLength", 10);
    }
}