在MVC3中自定义正则表达式验证

时间:2012-06-27 18:12:41

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

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

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

使用以下自定义属性

修饰的视图模型属性

[RegularExpressionIF(“DependantProperty”,“TargetValue”,“Pattern”,“ErrorMessage”)]

但我的要求是,我需要将property1值与基于Property2值的某些正则表达式匹配。对于前者属性2是下拉列表,值为1,2,3。如果用户选择1,那么常规表达模式将为{REGX1},对于2 {REGX2}就是这样。

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

[RegularExpressionIF(“DependantProperty”,“TargetValue”,patternDictionary,“ErrorMessage”)]

如果有人能帮我解决这个问题,那就太棒了。

1 个答案:

答案 0 :(得分: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
}