Model DataAnnotation [DataType(DateType.Date)]呈现DatePicker但隐藏了我的值?

时间:2015-02-12 16:54:17

标签: asp.net-mvc date razor asp.net-mvc-5 data-annotations

我的INV_Assets模型中有3个日期字段:acquired_datedisposed_datecreated_date。我让它们在某些MM/dd/yyyy中以@Html.EditorFor()格式显示。

我现在尝试做的是添加一个简单的日期选择器功能,这是我在THIS发布的关于在我的模型属性上使用[DataType(DataType.Date)]属性的帖子。我的created_date目前设为:

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

这会呈现下拉功能,但框中的值显示为“mm / dd / yyyy”,而不是显示实际值。例如,如果我删除了[DataType(DataType.Date)]属性:

    [Required]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime created_date { get; set; }

我的值显示为“02/10/2015”,没有datepicker功能。

任何人都可以提供一个示例,说明如何渲染此日期选择器功能,但在框中显示我的字段的实际值(当存在值时)?


修改: 我的View上的created_date字段目前定义如下(根据Chris的建议,我试图强制该格式为YYYY-MM-DD格式):

    <div class="form-group">
        @*@Html.LabelFor(model => model.created_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
        <span class="control-label col-md-2">Created Date:</span>
        <div class="col-md-10">
            @Html.EditorFor(model => model.created_date, new { htmlAttributes = new { @class = "form-control", @Value = Model.created_date.ToString("YYYY-MM-DD") } })
            @Html.ValidationMessageFor(model => model.created_date, "", new { @class = "text-danger" })
        </div>
    </div>

这将呈现以下代码:

<input value="YYYY-02-DD" class="form-control text-box single-line" data-val="true" data-val-date="The field created_date must be a date." data-val-required="The created_date field is required." id="created_date" name="created_date" type="date">

2 个答案:

答案 0 :(得分:3)

这对我有用

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

遵循Chris Pratt的想法

答案 1 :(得分:2)

我假设您还使用HTML 5 date输入类型,即<input type="date">。日期输入类型的值必须是ISO格式的日期:YYYY-MM-DD。您看到的占位符只是浏览器提供了更加用户友好的显示,但它在幕后转换为ISO格式。如果您没有提供正确的ISO日期,那么它基本上被浏览器视为没有任何价值。

相关问题