Asp.net mvc 4 使用数据批注验证列表中的多个依赖项
我有一个用户可以选择的复选框列表。我首先使用实体框架代码保存列表。这些是我的模型:Asp.net mvc 4 使用数据批注验证列表中的多个依赖项,asp.net-mvc-4,entity-framework-5,data-annotations,Asp.net Mvc 4,Entity Framework 5,Data Annotations,我有一个用户可以选择的复选框列表。我首先使用实体框架代码保存列表。这些是我的模型: public class Company { public int ID { get; set; } public string Name { get; set; } public virtual ICollection<Type> Types { get; set; } } public class Type { public int ID { get; set;
public class Company {
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Type> Types { get; set; }
}
public class Type {
public int ID { get; set; }
public string Name { get; set; }
}
有没有一种方法可以使用数据注释在列表中强制执行依赖关系?如果没有:在不使用jQuery的情况下强制执行这些依赖关系的最佳方法是什么
尝试一次
于是,我开始研究解决方案。以下是我目前的代码:
class TypeDependencyAttribute : ValidationAttribute
{
public string Dependant { get; set; }
public string[] Dependencies { get; set; }
public TypeDependencyAttribute(string dependant, string[] dependencies)
{
Dependant = dependant;
Dependencies = dependencies;
}
public override bool IsValid(object value)
{
List<Isala.Models.Metingen.Type> list = value as List<Isala.Models.Metingen.Type>;
if (list.Any(p => p.Naam == Dependant))
{
foreach(var dependency in Dependencies){
if (!list.Any(p => p.Naam == dependency))
{
return false;
}
}
}
return true;
}
}
显然,编译器也不喜欢这样。现在,我可以想出另一个解决方案,但我不喜欢:
[TypeDependent]
[DataMember(IsRequired = true)]
public ICollection<Type> Types { get; set; }
[类型相关]
[数据成员(IsRequired=true)]
公共ICollection类型{get;set;}
属性:
class TypeDependencyAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
List<Isala.Models.Metingen.Type> list = value as List<Isala.Models.Metingen.Type>;
if (list.Any(p => p.Naam == "BMI"))
{
if (!list.Any(p => p.Naam == "Lengte") && !list.Any(p => p.Naam == "Gewicht"))
{
return false;
}
}
return true;
}
}
class TypeDependencyAttribute:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
列表=作为列表的值;
如果(列出任何(p=>p.Naam==“BMI”))
{
如果(!list.Any(p=>p.Naam==“Lengte”)和&!list.Any(p=>p.Naam==“Gewicht”))
{
返回false;
}
}
返回true;
}
}
这是我唯一的选择吗?我是否可以解决此重复属性错误(我需要多个依赖项,BMI不是唯一的依赖项)。您可以根据自定义需要创建自定义数据批注 下面是一些例子
我尝试了这个方法,但似乎无法将数组传递给属性。有关更新,请参阅我的问题。您不能传递数组,但可以传递多个值。像
[依赖项(“BMI”、“长度”、“重量”)]
插入的覆盖公共覆盖bool IsValid(对象值)
尝试覆盖受保护覆盖验证结果IsValid(对象值、验证上下文验证上下文)
。bcos具有验证上下文,您可以使用该上下文检索传递的值。
[TypeDependency("BMI", "Lengte")]
[TypeDependency("BMI", "Gewicht")]
[DataMember(IsRequired = true)]
public ICollection<Type> Types { get; set; }
"Duplicate 'TypeDependency' attribute"
[TypeDependent]
[DataMember(IsRequired = true)]
public ICollection<Type> Types { get; set; }
class TypeDependencyAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
List<Isala.Models.Metingen.Type> list = value as List<Isala.Models.Metingen.Type>;
if (list.Any(p => p.Naam == "BMI"))
{
if (!list.Any(p => p.Naam == "Lengte") && !list.Any(p => p.Naam == "Gewicht"))
{
return false;
}
}
return true;
}
}