2011-10-18 131 views
2

我在我的视图模型类似在ASP.NET MVC3中,有没有办法让[RegularExpression]标签动态化?

[RegularExpression(...)] 
public string PenguinGenome 
{ 
    get;set; 
} 

public int PenguinSpecies 
{ 
    get; set; 
} 

有没有一种方法,使动态...基于PenguinSpecies?

即:

[RegularExpression(GetExpression(PenguinSpeciesId))] 
public string PenguinGenome 
{ 
    get;set; 
} 

public int PenguinSpeciesId 
{ 
    get; set; 
} 

public string GetExpression(int speciesId) 
{ 
    if (.....) 
     return "[some regex]"; 
} 

这不会起作用,因为PenguinSpeciesId不会在上下文中。什么是最好的解决方法?

+0

问题是,属性不能包含任何非静态引用,因为它们是特定类/属性/任何元数据的一部分。所以你不能调用任何方法或属性来实例化它们。 – Buildstarted

回答

1

This is an article对于ASP.NET MVC2,但是对于ASP.NET MVC3来说,这个过程非常接近。

基本上,您将需要创建自己的自定义验证程序,可以查看该对象,然后确定验证的正确方法。

0

RegularExpression验证器不是你想要的。你想根据另一个模型属性的值来验证PenguinGenome。换句话说 - 你不想在这里进行属性验证,而是模型验证。

您可以使用模型识别验证属性,但我个人wouldnt - 因为它“隐藏”依赖(没有人可以从模型类看出,PenguinGenome验证取决于PenguinSpeciesId)。我宁愿在这里使用IValidatableObject。

+0

使用正则表达式标签,它会自动将正则表达式验证放入我的视图中。这个解决方案会做同样的事吗? – NibblyPig

+0

不,不幸的是,自动生成的客户端验证不会在你的场景中工作 - 生成的正则表达式将不得不随着PenguinSpeciesId的任何变化而改变 - 这是不支持开箱即用的。你必须使用自定义验证逻辑(jQuery是你的朋友)或MVC支持的远程验证。 – rouen

相关问题