对ViewModel自定义约束

有时候我们常要对一些属性进行自定义的约束,可以这么做

using ListSys.Entity;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ListSys.Models
{
    public class UserViewModel
    {
        [Display(Name = "id")]
        public string Id { get; set; }
        [Required(ErrorMessage = "姓名必填")]
        [Display(Name = "姓名")]
        public string Name { get; set; }
        [CustomValidation(typeof(UserViewModel), "UnitAccout")]
        [Required(ErrorMessage = "账号必填")]
        [MinLength(length: 6, ErrorMessage = "账号长度不能小于6位")]
        [Display(Name = "账号")]
        public string Accout { get; set; }
        [Required(ErrorMessage = "密码必填")]
        [MinLength(length: 6, ErrorMessage = "密码长度不能小于6位")]
        [Display(Name = "密码")]
        public string Password { get; set; }
        [Required(ErrorMessage ="角色必填")]
        [Display(Name = "角色")]
        public string Role { get; set; }
        [Required]
        public string Type { get; set; }
        public IEnumerable<SelectListItem> GetRoles()
        {
            List<Role> roleList = new List<Role>();
            roleList.Add(new Role() { RoleStr = "管理员", RoleVale = "admin" });
            roleList.Add(new Models.Role() { RoleStr="员工",RoleVale="employee"});
            return roleList.Select(a => new SelectListItem
            {
                Text = a.RoleStr,
                Value = a.RoleVale,
            });
        }

        //验证账号是否是唯一的
        public static ValidationResult UnitAccout(string value, ValidationContext pValidationContext)
        {
            string Accout = ((UserViewModel)pValidationContext.ObjectInstance).Accout;
            string Type= ((UserViewModel)pValidationContext.ObjectInstance).Type;
            using (var db=new zjtDBEntities())
            {
                var userlist = db.User.Where(u => u.Accout == Accout).ToList();
                if (userlist.Count>0 && Type.Equals("create"))
                {
                    return new ValidationResult("该账号已注册");
                }
            }
            return ValidationResult.Success;
        }
    }
    //角色类
    public class Role
    {
        public string RoleStr { get; set; }
        public string RoleVale { get; set; }
    }
}
原文地址:https://www.cnblogs.com/Akeke/p/7158063.html