如何使用Asp.Net MVC保持带有asp.net mvc视图模型和数据注释(验证,显示和数据建模)属性的DRY?我已将模型对象以及特定于操作的视图模型传递给视图.我发现两个方向都有一些问题,试图保持干燥.
使用模型对象作为视图模型: 这在简单的情况下工作正常,并允许您只在每个模型对象上编写一次数据注释属性.当您具有需要多个对象类型的复杂视图时,会出现问题.生成的视图模型体系结构是使用视图模型类和实际模型类的混合体.此外,此方法可以将模型属性公开给您不想要的视图.
每个操作使用唯一的视图模型类: 视图模型类仅包含视图特定属性,使用数据注释属性进行修饰.根据我的经验,这种方法并没有被证明是非常干燥的,因为数据注释属性往往在视图模型类中重复.例如,New和Edit视图模型共享很多(但不是全部)属性和数据注释.
如何使用asp.net mvc视图模型和数据注释属性保持DRY?
一个很好的选择是从DataAnnotations切换到Fluent Validation。它使您可以将通用的验证逻辑封装在一个类中,以后可以将其应用于模型。
从文档中:
[Validator(typeof(PersonValidator))]
public class Person {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
public class PersonValidator : AbstractValidator<Person> {
public PersonValidator() {
RuleFor(x => x.Id).NotNull();
RuleFor(x => x.Name).Length(0, 10);
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 60);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现使用继承来组合共享属性效果最好。我对每个操作使用一个独特的视图类,并且对到目前为止的解决方案非常满意。它并不能解决 100% 的情况,但它确实涵盖了大多数情况,并且几乎消除了重复的数据契约属性。
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |