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

Hog*_*gan 7 asp.net-mvc datetime nullable required

我试过了:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}", ConvertEmptyStringToNull = true)]
[Required(AllowEmptyStrings = true)]
public DateTime? BirthDateFrom { get; set; }
Run Code Online (Sandbox Code Playgroud)

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
[Required]
public DateTime? BirthDateFrom { get; set; }
Run Code Online (Sandbox Code Playgroud)

和有和没有ConvertEmptyStringToNull和的所有组合AllowEmptyStrings.

在视图中,我有:

@Html.EditorFor(m => m.BirthDateFrom)
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ard 9

在我看来,完全删除[Required]注释将满足您的要求.


Ada*_*lph 5

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

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

a)'sentinal'值,例如DateTime.MinValue传达特殊的东西,并且您确定DateTime.MinValue在您的域模型中永远不会是有效值.

B)使用外部标志,以指示丢失的意思DateTime的值,例如bool isAny,bool isUnknown等等,或也许是适当的枚举