DataAnnotation 不显示存储在 ViewModel 中的数据

Posted

技术标签:

【中文标题】DataAnnotation 不显示存储在 ViewModel 中的数据【英文标题】:DataAnnotation not showing data stored in ViewModel 【发布时间】:2015-03-04 15:15:38 【问题描述】:

我有一个编辑视图。传入一个填写好的ViewModel,用户可以在其中进行编辑和提交。

    <div class="form-group">
        <strong>Date Effective:</strong>
        <div class="col-md-10">
            <p>
                @html.EditorFor(model => model.storeConfiguration.DateEffective)
                @Html.ValidationMessageFor(model => model.storeConfiguration.DateEffective)
        </div>
    </div>

视图模型包含:

public DateTime DateEffective  get; set; 

这会将日期显示为字符串,并允许轻松编辑。但是,我遇到了数据注释,发现通过添加[DataType(DataType.Date)],我能够获得一个有用的工具来选择日期。

不幸的是,在我上面的编辑视图中使用时,它显示一个空的日期选择器,而不是显示ViewModel 中的日期。

是否可以在不从我的编辑视图中删除ViewModel 数据的情况下获得此日期选择工具?

编辑:

在尝试追踪这个错误时,我在查看“检查元素”时遇到了这个问题

<input class="text-box single-line" data-val="true" data-val-date="The field DateEffective must be a date." id="storeConfiguration_DateEffective" name="storeConfiguration.DateEffective" type="date" value="11/5/2014">

这表明正确的值仍然存储在那里,只是没有向用户显示。

编辑 2:

初步测试表明[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "0:yyyy-MM-dd")] 工作正常。我不完全理解它,但似乎这是视图访问它所需的日期格式。从那里,EditorFor 能够在组织为 MM/dd/yyyy 的日期选择工具中显示它,这对我来说很好。

如果有人对这是做什么以及为什么有一个可靠的答案,我会接受它作为选择的答案。

【问题讨论】:

【参考方案1】:

基于此SO,问题可能是设置 value 属性的日期格式。

【讨论】:

这就是我刚刚发现的错误信息。我想你可能走在正确的轨道上。 The specified value '11/05/2014' does not conform to the required format, 'yyyy-MM-dd'.

以上是关于DataAnnotation 不显示存储在 ViewModel 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

DataAnnotation 正则表达式问题

如何避免在EF自动生成的model中的DataAnnotation被覆盖掉

在 ASP.net core mvc 3.1 中的 HtmlHelper 扩展方法中使用 DataAnnotation 本地化器

EmailAddress DataAnnotation 在 View 上标记为有效但 ModelState.IsValid = false?

ASP.NET MVC:通过 DataAnnotation 进行自定义验证

text 模型DataAnnotation测试