0

我正在为我的一个 MVC3 项目实现自定义正则表达式验证器。

我已经能够使用自定义属性正确执行验证。

用以下自定义属性装饰的视图模型属性

[RegularExpressionIF("DependantProperty","TargetValue","Pattern","ErrorMessage")]

但我的要求是,我需要根据 Property2 值将 property1 值与某个正则表达式进行匹配。例如。属性 2 是一个下拉列表,具有值 1,2,3 。如果用户选择 1,则正则表达式模式将是 {REGX1},对于 2 {REGX2} 就像这样。

我试图通过传递包含这些值的变量来修改属性。但是在构建.Net 坚持认为它应该是一个“常量”来传递。我可以对属性中的值进行硬编码,但我无法传递如下参数

[RegularExpressionIF("DependantProperty","TargetValue",patternDictionary,"ErrorMessage")]

如果有人能在这方面帮助我,那就太好了..

4

1 回答 1

0

您需要在运行时使用反射来获取属性的值。

protected override ValidationResult IsValid(
    object value, 
    ValidationContext context)
{
    // DependantProperty is the string name of the dependant property
    PropertyInfo property = context.ObjectType.GetProperty(this.DependantProperty);
    object dependant = property.GetValue(context.ObjectInstance, null);

    // do something with dependant
}
于 2012-06-27T18:34:47.343 回答