所以我有以下几行代码:
else
{
//if not found, call Gateway Add()
user.Id = await C3SDbContext.UserGateway.NextIdAsync(context);
user.CreatedById = modifier.CreatedById;
user.CreatedBy = modifier.CreatedBy;
user.DateCreated = DateTime.Now;
user.UserType = "G";
System.Diagnostics.Debug.WriteLine(user.UserType);
user.Status = UserStatus.NEW;
System.Diagnostics.Debug.WriteLine(user.UserType);
user.Uic = await C3SDbContext.UicGateway.GetUicByIdAsync(context, user.UicId);
System.Diagnostics.Debug.WriteLine(user.UserType);
user.Role = await C3SDbContext.RoleGateway.GetRoleByIdAsync(context, user.RoleId);
System.Diagnostics.Debug.WriteLine(user.UserType);
if (ModelState.IsValid)
{
userCheck = await C3SDbContext.UserGateway.AddNewGovernmentUserAsync(context, user, modifier);
}
else
{
System.Diagnostics.Debug.WriteLine(user.UserType);
ICollection<ModelState> ListValues = ModelState.Values;
List<object> Errors = new List<object>();
foreach (var item in ModelState.Values)
{
if (item.Errors.Count() > 0)
{
Errors.Add(item.Errors);
}
}
}
}
user是GovernmentUser.cs的一个实例,它继承自User.cs. UserType是User的字符串属性。当我运行它时,“System.Diagnostic.Debug.WriteLine(user.UserType);”的所有实例在“输出”窗口中返回“G”。但是,错误列表返回一个项目,告诉我UserType为null。
我的问题是:这里发生了什么?当它们以相同的类型执行时,它们如何能够得到不同的结果,我怎样才能得到它以便ModelState.IsValid == true?
答案 0 :(得分:1)
ModelState检查在MVC中发布给您的数据。我不知道这是否在你的控制器中,但如果是,那么我的猜测是UserType不会在发布的原始数据上。在设置服务器端之后,我不认为你可以使用该检查。它检查从客户端收到的数据。如果客户端不需要UserType,只需从Dto中删除该规则即可。但是,如果你直接在这里上传实际的实体,而且它正在使用EF使用的Required属性,那么我会像平常一样保存它,让EF处理valdiation而不是使用ModelState。