在构建应用程序时,我们创建了一个通用对象模型来存储一些值,viewmodel目前看起来有点像这样:
public class FooViewModel {
public int ID { get; set; }
public byte FooType { get; set; }
[Required]
[Display(Name = "Bar Name")]
public string Name { get; set; }
[Required]
public string Email { get; set; }
//etc, etc
}
问题是:根据FooType,我们希望显示名称不同,类型1和2不需要电子邮件,但类型3和4需要电子邮件。
我们尝试将每个类型不同的属性分离到继承自此类的类,但验证执行a fallback on what is specified in the base type,因此无效。
目前,唯一的选择似乎是为每个FooType(以及单独的控制器和视图)创建一个viewmodel,这会导致大量的代码重复。
保持这种干燥的其他方法有哪些?
答案 0 :(得分:1)
为了使验证上下文受益(例如验证不同上下文中的对象),我强烈建议使用FluentValidation库。
答案 1 :(得分:0)
您可以实施自定义RequiredIf validation attribute,也可以实施IValidatableObject。