【发布时间】:2021-01-09 01:55:38
【问题描述】:
.NET MVC 应用程序,使用 Identity 和 EF 代码优先。 在其中我有一个 CustomValidations.cs,我在其中编写了一些自定义验证属性:其中一些包含服务器端和客户端验证。模型和视图模型都使用这些验证属性。 (客户端验证通过实现 IClientValidatable 并添加其方法 GetClientValidationRules 来完成。
例如(位于 MVC 项目中的 CustomAttributes/CustomValidations.cs 文件夹中):
namespace MyApp.CustomAttributes {
public class RequiredIfSomething : ValidationAttribute, IClientValidatable {
public RequiredIfSomething() { }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
//server-side validation code here
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
// client-side validation code here.
yield return rule;
}
}
}
现在我正在尝试将解决方案分离到不同的项目中。我首先为 DAL 层创建了一个类库项目(MyApp.DAL),并将我的所有实体框架实体、dbcontext(ApplicationDbContext,它是一个 IdentityDbContext)和迁移文件夹从 MVC 项目移动到新项目,添加了引用在 MVC 项目和修改的命名空间等中。 所以现在,MVC 项目使用的是 DAL 项目。
这一切似乎都在起作用,但现在我的自定义验证器出现了问题: 我猜这些验证(或至少其中一些)应该驻留在 DAL 项目中,因为我正在用它们装饰模型属性。但是,我会在 DAL 项目中不仅有服务器端验证,还有客户端验证,我觉得应该是特定于 mvc 的(因此,不应该驻留在 DAL 项目中)......
这样做的正确方法是什么?
【问题讨论】:
标签: c# asp.net-mvc