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);
}