Asp.net mvc 在ASP.NET MVC3中,是否有方法使[RegularExpression]标记动态?
我的viewmodel中有如下内容Asp.net mvc 在ASP.NET MVC3中,是否有方法使[RegularExpression]标记动态?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我的viewmodel中有如下内容 [RegularExpression(...)] public string PenguinGenome { get;set; } public int PenguinSpecies { get; set; } 有没有办法让。。。基于企鹅物种的动态 即: 这不起作用,因为上下文中不存在PenguinSpeciesId。什么是最好的解决方法?对于ASP.NET MVC2,但对于ASP.NET MVC3,过程非常接近 基本上,您需要创建自己的
[RegularExpression(...)]
public string PenguinGenome
{
get;set;
}
public int PenguinSpecies
{
get; set;
}
有没有办法让。。。基于企鹅物种的动态
即:
这不起作用,因为上下文中不存在PenguinSpeciesId。什么是最好的解决方法?对于ASP.NET MVC2,但对于ASP.NET MVC3,过程非常接近
基本上,您需要创建自己的自定义验证器来查看对象,然后确定正确的验证方法。RegularExpression验证器并不是您真正想要的。您希望基于另一个模型属性的值验证该属性。换句话说,这里不需要属性验证,只需要模型验证
您可以使用模型感知验证属性,但我个人不这么做,因为它“隐藏”了依赖关系(没有人能从查看模型类中看出,企鹅基因组验证依赖于企鹅物种ID)。我更愿意在这里使用IValidatableObject。问题是属性不能包含任何非静态引用,因为它们是特定类/属性/任何内容的元数据的一部分。因此,您不能调用任何方法或属性来实例化它们。使用正则表达式标记,它会自动将正则表达式验证放在我的视图中。此解决方案也会这样做吗?不,不幸的是,自动生成的客户端验证在您的场景中不起作用-生成的正则表达式必须随PenguinSpeciesId的任何更改而更改-这是不支持的。您必须使用自定义验证逻辑(jquery是您的朋友)或MVC支持的远程验证。
[RegularExpression(GetExpression(PenguinSpeciesId))]
public string PenguinGenome
{
get;set;
}
public int PenguinSpeciesId
{
get; set;
}
public string GetExpression(int speciesId)
{
if (.....)
return "[some regex]";
}