DisplayFormat Dataannotation不起作用

时间:2011-08-03 05:13:31

标签: asp.net-mvc-3 entity-framework-4 razor

我的模型类中有以下数据注释:

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

当我在我的视图中使用以下内容时,我没有得到验证错误:

 <tr>
        <td>@Html.LabelFor(x => x.DateOfBirth, new { @class = "lbl" }, "Date Of Birth") </td>
        <td>@Html.TextBoxFor(x => x.DateOfBirth, new { @class = "w100 _dob" })
        <br>@Html.ValidationMessageFor(x => x.DateOfBirth)
        </td>

</tr>

你能建议解决方案吗?

2 个答案:

答案 0 :(得分:4)

DisplayFormat属性与验证无关。它仅用于在视图上显示时格式化值。如果要验证用户在相应输入字段中输入的值,则必须编写自定义模型绑定器。

顺便说一句,DisplayFormat属性与Html.EditorFor帮助器一起使用,它对你正在使用的Html.TextBoxFor帮助器没有任何影响:

<tr>
    <td>
        @Html.LabelFor(x => x.DateOfBirth, "Date Of Birth")
    </td>
    <td>
        @Html.EditorFor(x => x.DateOfBirth)
        <br/>
        @Html.ValidationMessageFor(x => x.DateOfBirth)
    </td>
</tr>

答案 1 :(得分:0)

LabelFor没有允许你设置CSS的重载,你可以设置lambda或Lambda和文本。

当我删除“新{@class =”lbl“}”部分并运行您的代码时,我会进行验证工作 细

编辑:道歉,我最初的测试是使用EditorFor,我的机器文化设置为美国,所以它运作良好。

您可以将webconfig中的全球化文化设置为使用mm \ dd \ yyyy的正确文化。

<globalization culture="en-us" />

但这将在整个网站上生效(包括数字,日期,货币等格式),所以如果这是一个有限的案例,那么这可能不是您问题的解决方案。