Dependency injection ==employee.DOB)ModelState.AddModelError(“DOB”,“需要出生日期”);'在控制器后期创建方法中,如果提供的DOB字段为null,则我得到ModelState.IsValid FALSE和model validati

Dependency injection ==employee.DOB)ModelState.AddModelError(“DOB”,“需要出生日期”);'在控制器后期创建方法中,如果提供的DOB字段为null,则我得到ModelState.IsValid FALSE和model validati,dependency-injection,asp.net-core-mvc,business-logic-layer,Dependency Injection,Asp.net Core Mvc,Business Logic Layer,==employee.DOB)ModelState.AddModelError(“DOB”,“需要出生日期”);'在控制器后期创建方法中,如果提供的DOB字段为null,则我得到ModelState.IsValid FALSE和model validation error,在Repository类中编写了相同的字段,并期望得到相同的结果。请建议您是否有任何简单的解决方案来实现相同的结果,该代码在.NetFramework 4中的ASP.Net MVC 5中可以正常运行多年。5@raju1208,


==employee.DOB)ModelState.AddModelError(“DOB”,“需要出生日期”);'在控制器后期创建方法中,如果提供的DOB字段为null,则我得到ModelState.IsValid FALSE和model validation error,在Repository类中编写了相同的字段,并期望得到相同的结果。请建议您是否有任何简单的解决方案来实现相同的结果,该代码在.NetFramework 4中的ASP.Net MVC 5中可以正常运行多年。5@raju1208,如果您必须根据您提供的方法显示错误消息,我建议您可以使用
jquery ajax
调用Create操作,然后通过操作返回的内容将相应的消息添加到ajax的success方法中,您能接受此计划吗?如果可能的话,我会更新我的帖子。对于大型项目来说,这是行不通的,不管怎样,出现错误消息并不是目的,问题是用良好的实践开发应用程序,以便将来的维护和增强变得容易。
public interface IValidationDictionary
{
    void AddError(string key, string errorMessage);
    bool IsValid { get; }
}

public class ModelStateWrapper : IValidationDictionary
{
    private ModelStateDictionary _modelState;

    public ModelStateWrapper(ModelStateDictionary modelState)
    {
        _modelState = modelState;
    }

    #region IValidationDictionary Members

    public void AddError(string key, string errorMessage)
    {
        _modelState.AddModelError(key, errorMessage);
    }

    public bool IsValid
    {
        get { return _modelState.IsValid; }
    }
    #endregion
}
    private Models.IValidationDictionary _modelState;
    public EmployeeRepo(Models.IValidationDictionary modelState)
    {
        _modelState = modelState;
    }

   public int Create(Models.Employee ObjToCreate)
   {
        if (!Validate(ObjToCreate))
            return 0;

        _context.Employee.Add(ObjToCreate);
        _context.SaveChanges();

        return ObjToCreate.Id;
   }

    protected bool Validate(Models.Employee objToValidate)
    {
        if (objToValidate.Name.Trim().Length == 0)
            _modelState.AddError("Name", "Name is required.");

        if (null == objToValidate.DOB)
            _modelState.AddError("DOB", "DOB is required");
        return _modelState.IsValid;
    }
private Repository.IEmployeeRepo repo;
public EmployeesController(ApplicationDbContext context)
{
    _context = context;
    repo = new Repository.EmployeeRepo(new Models.ModelStateWrapper(this.ModelState));
}

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Create([Bind("Name,DOB,Department")] Employee employee)
    {
        var respId = repo.Create(employee);
        if (0 != respId.Id)
        {
            return RedirectToAction(nameof(Details), new { id = respId.Id });
        }
        return View(employee);
    }
    public class Employee
    { 
        public int Id { get; set; }

        [CustomValidate]
        public string Name { get; set; }

        [CustomValidate]
        public string DOB { get; set; }

        public string Department{ get; set; }
    }
 public class CustomValidateAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value == null || string.IsNullOrEmpty(value.ToString().Trim()))
            {
                return new ValidationResult(validationContext.DisplayName + " is required.");
            }

            return ValidationResult.Success;
        }
    }
 [HttpPost]
        public IActionResult Create([Bind("Name,DOB,Department")]Employee employee)
        { 
            if (ModelState.IsValid)
            {
                _context.Employee.Add(employee); 
                _context.SaveChanges();
                return RedirectToAction(nameof(Details), new { id = employee.Id });
            }
            return View(employee);
        }