【问题标题】:Why does Razor TextBoxFor (with date annotation) not display the existing datetime value?为什么 Razor TextBoxFor(带日期注释)不显示现有的日期时间值?
【发布时间】:2019-02-22 14:55:27
【问题描述】:

我有以下日期时间字段

    [DisplayName("Expiry Date")]
    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime ExpiryDate { get; set; }

然后我像这样显示它(最重要的是我检查我实际上有一个 ExpiryDate 的值 - 它显示为我所期望的)

<div>
     Current value: @Model.ExpiryDate.ToShortDateString()
     @Html.TextBoxFor(model => model.ExpiryDate, "{0:dd/MM/yyyy}" , new { type = "date", @class = "form-control" })
</div>

日期选择器(在 Chrome 中)可以正确选择日期 - 我可以选择一个日期,它会在提交时正确绑定回我的模型。当 ExpiryDate 没有值时也可以正常工作,显示“dd/mm/yyyy”

但当 ExpiryDate 确实有值时,文本框仍显示 dd/mm/yyyy 而不是 22/02/2019 或任何值

奇怪的是,当我检查生成的 HTML 时,文本框似乎具有正确的值,如下所示

<input class="form-control" data-val="true" data-val-date="The field Expiry Date must be a date." data-val-required="The Expiry Date field is required." id="ExpiryDate" name="ExpiryDate" type="date" value="22/02/2019">

我也尝试过在 HtmlAttributes 中显式包含该值,包括 @value = Model.ExpiryDate.ToShortDateString(),这没有区别(不是我特别期望它,因为该值已经正确)

我错过了什么?

【问题讨论】:

标签: c# asp.net-mvc razor


【解决方案1】:

虽然我没有测试过,但我认为问题在于该值不应该尊重您的显示格式,而是 HTML 的标准,因此分配“02/22/2019”应该可以工作(在 ASP.NET 中,您可能赋值转换时需要使用InvariantCulture)。

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多