我试过了:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}", ConvertEmptyStringToNull = true)]
[Required(AllowEmptyStrings = true)]
public DateTime? BirthDateFrom { get; set; }
和
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
[Required]
public DateTime? BirthDateFrom { get; set; }
以及包含和不包含ConvertEmptyStringToNull
和AllowEmptyStrings
的所有组合。
在视图中,我有:
@Html.EditorFor(m => m.BirthDateFrom)
我可以提交带有效日期的表单,但在该字段中使用空字符串,它只会变为红色并且无法提交表单。 如何在所需的可为空的DateTime中允许使用null或空字符串值的HTML表单提交?
答案 0 :(得分:9)
在我看来,完全删除[Required]
注释完全符合您的要求。
答案 1 :(得分:5)
类型可以为空的事实意味着该值不是必需的。没有必要强制执行非空值或空值,因为空值无论如何都不提供任何信息。
听起来你遇到的问题是'null'的多个含义,例如'无'对'任何'对'未知'。不幸的是,null的.NET概念不包括null的不同类型。沟通这个的唯一方法是使用: -
a)'sentinal'值,例如DateTime.MinValue
会传达一些特别的内容,并确保DateTime.MinValue
永远不会成为域模型中的有效值。
b)使用外部标记来指示缺失的DateTime
值的含义,例如: bool isAny
,bool isUnknown
等,或者可能是适当的枚举
答案 2 :(得分:0)
如果你正在处理EF,你可以通过这种方式选择它。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();
base.OnModelCreating(modelBuilder);
}