我正在为我的一个MVC3项目实现自定义正则表达式验证器。
我已经能够使用自定义atrribute正确执行验证。
使用以下自定义属性
修饰的视图模型属性[RegularExpressionIF(“DependantProperty”,“TargetValue”,“Pattern”,“ErrorMessage”)]
但我的要求是,我需要将property1值与基于Property2值的某些正则表达式匹配。对于前者属性2是下拉列表,值为1,2,3。如果用户选择1,那么常规表达模式将为{REGX1},对于2 {REGX2}就是这样。
我试图通过传递包含这些值的变量来修改属性。但在构建.Net坚持认为它应该是一个“常数”通过。我能够对属性中的值进行硬编码,但我决不会传递如下所示的参数
[RegularExpressionIF(“DependantProperty”,“TargetValue”,patternDictionary,“ErrorMessage”)]
如果有人能帮我解决这个问题,那就太棒了。
答案 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
}