【问题标题】:.NET Core MVC - Binding DateTime always Results in MinValue.NET Core MVC - 绑定 DateTime 总是导致 MinValue
【发布时间】:2020-05-30 08:18:45
【问题描述】:

我的模型中有一个BirthDateproperty,看起来像这样

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

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

<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-mvc asp.net-core asp.net-core-mvc


    【解决方案1】:

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

    Asp-for,在渲染时,将使用指定的模型绑定属性idname 填充input 元素(以及其他内容,例如值、验证等)。您可以在微软官方ASP.NET Core tag helper documentation. 上阅读更多信息

    直接来自他们的文档:

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

    【讨论】:

    • 好电话。一旦我看到name 属性,它就全部点击了。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多