8

我努力了:

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

以及所有有和没有ConvertEmptyStringToNulland的组合AllowEmptyStrings

鉴于,我有:

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

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

4

3 回答 3

10

在我看来,简单地[Required]完全删除注释就可以满足您的要求。

于 2012-01-23T21:46:09.170 回答
6

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

听起来您遇到的问题是“null”的多种含义,例如“none”与“any”与“unknown”。不幸的是,.NET 的 null 概念不包括不同类型的 null。传达此信息的唯一方法是使用以下任一方法:-

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

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

于 2011-03-13T14:25:48.763 回答
0

如果您正在处理 EF,则可以通过这种方式使其成为可选。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
    base.OnModelCreating(modelBuilder);
}
于 2015-08-05T10:49:17.370 回答