空字段,但不为空

时间:2017-03-29 20:24:01

标签: c# asp.net-mvc

所以我有以下几行代码:

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?

1 个答案:

答案 0 :(得分:1)

ModelState检查在MVC中发布给您的数据。我不知道这是否在你的控制器中,但如果是,那么我的猜测是UserType不会在发布的原始数据上。在设置服务器端之后,我不认为你可以使用该检查。它检查从客户端收到的数据。如果客户端不需要UserType,只需从Dto中删除该规则即可。但是,如果你直接在这里上传实际的实体,而且它正在使用EF使用的Required属性,那么我会像平常一样保存它,让EF处理valdiation而不是使用ModelState。