Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在ASP.NET MVC3中,是否有方法使[RegularExpression]标记动态?_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 在ASP.NET MVC3中,是否有方法使[RegularExpression]标记动态?

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,过程非常接近 基本上,您需要创建自己的

我的viewmodel中有如下内容

[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]";
}