如果提交的空日期默认为默认值,为什么 ModelState 无效?
Why is ModelState invalid if a submitted empty date defaults to default value?
我有一个视图,我可以在其中加载表单来更新用户。当我用要在页面上显示的数据填充我的视图模型 UpdateUserViewModel
时,UserModel
上的 Info
属性 为空。这是意料之中的,因为数据库中根本没有它的记录,因此不会检索到它。但是,我仍然为其两个属性添加隐藏字段,因为当我 post 表单时,我希望 Info
属性 使用默认值创建,这确实发生了。
public UpdateUserViewModel {
public UserModel User { get; set; }
}
public class UserModel
{
public int Id { get; set; }
public string Name { get; set; }
public InfoModel Info { get; set; }
}
public class InfoModel {
public DateTime InfoDate { get; set; }
public string ConcurrencyToken { get; set; }
}
发布表单导致 ModelState.IsValid
对于 InfoModel
上的 InfoDate
属性 是错误的。它给出了错误消息 The value '' is invalid
。但这没有意义,因为当我检查 posted 模型的 InfoDate
值时,我看到它是默认的最小日期 1/1/0001 12:00:00 AM
.
我考虑过让 InfoDate
可以为空,但这没有意义,因为我需要将此 属性 映射到业务层模型并将其设置为默认值无论如何约会。我也不明白为什么它在明显默认为一个值时显示该错误。
当我看到表单提交的空日期已成功默认为 1/1/0001 12:00:00 AM
时,为什么我会得到 The value '' is invalid
?我该如何解决这个问题?
我在想,也许它正在专门查看用户在该字段中设置的值,而不是 属性 的最终值?但如果是这样,它为什么会在乎呢?我在 InfoDate
上没有任何验证属性,例如 [Required]
.
在客户端绑定数据时,它会先从 ModelState 中获取值,然后再从 Model 中获取值。尝试在检查 ModelState.And 之前添加 ModelState.Clear()
和 TryValidateModel(xxx)
那么您将无法获取The value '' is invalid
.
ModelState.Clear();
TryValidateModel(MyProperty);
var IsValid=ModelState.IsValid;
我有一个视图,我可以在其中加载表单来更新用户。当我用要在页面上显示的数据填充我的视图模型 UpdateUserViewModel
时,UserModel
上的 Info
属性 为空。这是意料之中的,因为数据库中根本没有它的记录,因此不会检索到它。但是,我仍然为其两个属性添加隐藏字段,因为当我 post 表单时,我希望 Info
属性 使用默认值创建,这确实发生了。
public UpdateUserViewModel {
public UserModel User { get; set; }
}
public class UserModel
{
public int Id { get; set; }
public string Name { get; set; }
public InfoModel Info { get; set; }
}
public class InfoModel {
public DateTime InfoDate { get; set; }
public string ConcurrencyToken { get; set; }
}
发布表单导致 ModelState.IsValid
对于 InfoModel
上的 InfoDate
属性 是错误的。它给出了错误消息 The value '' is invalid
。但这没有意义,因为当我检查 posted 模型的 InfoDate
值时,我看到它是默认的最小日期 1/1/0001 12:00:00 AM
.
我考虑过让 InfoDate
可以为空,但这没有意义,因为我需要将此 属性 映射到业务层模型并将其设置为默认值无论如何约会。我也不明白为什么它在明显默认为一个值时显示该错误。
当我看到表单提交的空日期已成功默认为 1/1/0001 12:00:00 AM
时,为什么我会得到 The value '' is invalid
?我该如何解决这个问题?
我在想,也许它正在专门查看用户在该字段中设置的值,而不是 属性 的最终值?但如果是这样,它为什么会在乎呢?我在 InfoDate
上没有任何验证属性,例如 [Required]
.
在客户端绑定数据时,它会先从 ModelState 中获取值,然后再从 Model 中获取值。尝试在检查 ModelState.And 之前添加 ModelState.Clear()
和 TryValidateModel(xxx)
那么您将无法获取The value '' is invalid
.
ModelState.Clear();
TryValidateModel(MyProperty);
var IsValid=ModelState.IsValid;