Asp.net mvc 3 DisplayFormat数据批注不工作

Asp.net mvc 3 DisplayFormat数据批注不工作,asp.net-mvc-3,entity-framework-4,razor,Asp.net Mvc 3,Entity Framework 4,Razor,我的模型类中有以下dataannotation: [Required(ErrorMessage = "Required")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] public DateTime DateOfBirth { get; set; } 当我在视图中使用以下内容时,不会出现验证错误: <tr> <td>

我的模型类中有以下dataannotation:

[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>

@LabelFor(x=>x.DateOfBirth,新的{@class=“lbl”},“出生日期”)
@TextBoxFor(x=>x.DateOfBirth,new{@class=“w100_-dob”})

@Html.ValidationMessageFor(x=>x.DateOfBirth)

您能提出解决方案吗?

LabelFor没有允许您设置CSS的重载,您可以设置lambda或lambda以及文本

当我删除“new{@class=“lbl”}”部分并运行您的代码时,验证就开始工作了 好的

编辑:抱歉,我最初的测试是使用EditorFor,我的机器文化设置为我们,所以一切正常。

您可以将网络配置中的全球化区域性设置为使用mm\dd\yyyy eg的正确区域性

<globalization culture="en-us" />


但这将影响整个网站(包括数字、日期、货币等的格式),因此如果这是一个有限的情况,那么这可能不是解决您问题的方法。

LabelFor没有允许您设置CSS的重载,您可以设置lambda或lambda以及文本

当我删除“new{@class=“lbl”}”部分并运行您的代码时,验证就开始工作了 好的

编辑:抱歉,我最初的测试是使用EditorFor,我的机器文化设置为我们,所以一切正常。

您可以将网络配置中的全球化区域性设置为使用mm\dd\yyyy eg的正确区域性

<globalization culture="en-us" />


但这将对整个网站(包括数字、日期、货币等的格式)生效,因此如果这是一个有限的情况,那么这可能不是您问题的解决方案。

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

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

<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>

@LabelFor(x=>x.DateOfBirth,“出生日期”)
@EditorFor(x=>x.DateOfBirth)

@Html.ValidationMessageFor(x=>x.DateOfBirth)
显示格式属性与验证无关。它仅用于在视图上显示时格式化值。如果要验证用户在相应输入字段中输入的值是否正确,则必须编写自定义模型活页夹

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

<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>

@LabelFor(x=>x.DateOfBirth,“出生日期”)
@EditorFor(x=>x.DateOfBirth)

@Html.ValidationMessageFor(x=>x.DateOfBirth)
我注意到使用
Html.TextBoxFor
对于我正在处理的项目中的一个EF POCO,
DisplayFormat
工作正常。但是,如果我尝试在我正在使用的编辑视图模型中对该字段的相同副本使用完全相同的
DisplayFormat
,则该字段将使用默认的显示格式。但是,唯一的
DisplayName
确实如此,这也是我知道它正在使用这组
DataAnnotations
(即,我在
DisplayName
中添加了“VMTest”)。这可能是我的项目中某些特定内容的结果,但这是一个有趣的怪癖,引起了我的一些困惑。我注意到
Html.TextBoxFor
对于我正在处理的项目中的一个EF POCO,
DisplayFormat
工作正常。但是,如果我尝试在我正在使用的编辑视图模型中对该字段的相同副本使用完全相同的
DisplayFormat
,则该字段将使用默认的显示格式。但是,唯一的
DisplayName
确实如此,这也是我知道它正在使用这组
DataAnnotations
(即,我在
DisplayName
中添加了“VMTest”)。这可能是我的项目中某些特定内容的结果,但这是一个有趣的怪癖,引起了我的一些困惑。