如何在.NET MVC3 HTML表单中允许所需的可为空的DateTime中使用null值?

时间:2011-03-13 09:39:09

标签: asp.net-mvc datetime nullable required

我试过了:

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

以及包含和不包含ConvertEmptyStringToNullAllowEmptyStrings的所有组合。

在视图中,我有:

@Html.EditorFor(m => m.BirthDateFrom)

我可以提交带有效日期的表单,但在该字段中使用空字符串,它只会变为红色并且无法提交表单。 如何在所需的可为空的DateTime中允许使用null或空字符串值的HTML表单提交?

3 个答案:

答案 0 :(得分:9)

在我看来,完全删除[Required]注释完全符合您的要求。

答案 1 :(得分:5)

类型可以为空的事实意味着该值是必需的。没有必要强制执行非空值空值,因为空值无论如何都不提供任何信息。

听起来你遇到的问题是'null'的多个含义,例如'无'对'任何'对'未知'。不幸的是,null的.NET概念不包括null的不同类型。沟通这个的唯一方法是使用: -

a)'sentinal'值,例如DateTime.MinValue会传达一些特别的内容,并确保DateTime.MinValue永远不会成为域模型中的有效值。

b)使用外部标记来指示缺失的DateTime值的含义,例如: bool isAnybool isUnknown等,或者可能是适当的枚举

答案 2 :(得分:0)

如果你正在处理EF,你可以通过这种方式选择它。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
    base.OnModelCreating(modelBuilder);
}