asp.net-mvc - .NET Core MVC - 绑定 DateTime 总是产生 MinValue
问题描述
我的模型中有一个BirthDate
看起来像这样的属性
[Required]
[DataType(DataType.DateTime)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:MM/dd/yyy}")]
public DateTime BirthDate { get; set; }
在我看来,我将此属性绑定到input
usingasp-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
。我究竟做错了什么?
解决方案
您的 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 属性值。有关其他信息,请参阅表达式名称部分。
推荐阅读
- c# - 如何跳过数组的每个第三个元素
- angular - 在 Angular 中清除浏览器缓存
- excel - 在不知道确切名称的情况下打开工作簿
- android - 如何让我的 RecyclerView 冻结在 .XML 文件中?
- javascript - html5输入类型范围总是指向最小值并且没有在文本输入上获得onChange
- python - Python - 基于值绘制网格
- azure - 如何阻止对 Azure webapp 的 HTTP 请求,来自特定其他 Azure 服务的请求除外
- python - Paramiko / Python:调用shell时通道关闭
- r - 从字符转换为日期格式
- angular - Angular Material 数据表列按日期范围排序