首页 > 解决方案 > .NET Core MVC - 绑定 DateTime 总是产生 MinValue

问题描述

我的模型中有一个BirthDate看起来像这样的属性

[Required]
    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:MM/dd/yyy}")]
    public DateTime BirthDate { get; set; }

在我看来,我将此属性绑定到inputusingasp-for标签助手。它看起来像这样:

<input class="form-control" type="date" name="dateofbirth" id="inputDateOfBirth" placeholder="mm/dd/yyyy" data-date-format="mm/dd/yyyy"
               max="@DateTime.Today.ToString("yyyy-MM-dd")" asp-for="FamilyMember.BirthDate" required/>

将表单发布到控制器时,该BirthDate属性始终设置为01/01/0001。我究竟做错了什么?

标签: asp.net-mvcasp.net-coreasp.net-core-mvc

解决方案


您的 html 元素正在使用asp-for标签助手,但您还指定了name="dateofbirth"and id="inputDateOfBith"。删除它将发布正确的值。

Asp-for,在渲染时,将使用指定的模型绑定属性填充一个input元素,id并且name已经(以及其他内容,如值、验证等)。您可以在 Microsoft 的官方ASP.NET Core 标记帮助程序文档中阅读有关此内容的更多信息。

直接来自他们的文档:

为 asp-for 属性中指定的表达式名称生成 id 和 name HTML 属性。asp-for="Property1.Property2" 等价于 m => m.Property1.Property2。表达式的名称用于 asp-for 属性值。有关其他信息,请参阅表达式名称部分。


推荐阅读