加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 视图模型最佳实践中的ASP.NET MVC自定义验证

发布时间:2020-12-16 03:22:10 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试将域驱动设计与测试驱动开发的组合用于我在ASP.NET MVC 3中构建的此应用程序.我的架构设置了存储库,域模型,视图模型,控制器和视图.所有验证都将在视图模型中处理.我将我的视图模型设置为继承自“IValidatableObject”,以便我的验证属性和我在“Val
我正在尝试将域驱动设计与测试驱动开发的组合用于我在ASP.NET MVC 3中构建的此应用程序.我的架构设置了存储库,域模型,视图模型,控制器和视图.所有验证都将在视图模型中处理.我将我的视图模型设置为继承自“IValidatableObject”,以便我的验证属性和我在“Validate”方法中设置的自定义验证都在我的控制器方法调用“ModelState.IsValid”时执行.我遇到的问题是在我的视图模型的Validate方法中访问我的存储库.我需要访问存储库以检查数据库中的重复记录.似乎最好的想法是创建一个IRepository类型的属性,并通过将我的存储库注入视图模型的构造函数来设置该属性.例如:

public class UserViewModel : IValidatableObject
{
       public UserViewModel(User user,IUserRepository userRepository)
       {
              FirstName = user.FirstName;
              LastName = user.LastName;
              UserRepository = userRepository;
              UserName = user.UserName;
       }
       public string UserName { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public IUserRepository UserRepository { get; set; }
       public IEnumerable<ValidationResult> Validate()
       {
           UserCriteria criteria = new UserCriteria { UserName = this.UserName };
           IList<User> users = UserRepository.SearchUsers(criteria);

           if (users != null && users.count() > 0)
           {
               yield return new ValidationResult("User with username " + this.UserName + " already exists."
           }
       }
}

你们认为这是个好主意吗?

解决方法

这很好,但如果我是你,我会用

...
private readonly Func<IUserRepository> userRepositoryFactory;
...
public IEnumerable<ValidationResult> Validate()  
   {  
       UserCriteria criteria = new UserCriteria { UserName = this.UserName };  
       using(var UserRepository = userRepositoryFactory())
       {
           IList<User> users = UserRepository.SearchUsers(criteria);  

           if (users != null && users.count() > 0)  
           {  
               yield return new ValidationResult("User with username " + this.UserName + " already exists."  
           }  
       }
   }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读