我发现从MVC 3升级到MVC 4有关隐藏字段数据验证的问题。这是一个简化的例子:
[MetadataType(typeof(UserMetadata))]
public class User {
public int UserId { get; set; }
publc string Name { get; set; }
public DateTime Created { get; set; }
}
private class UserMetadata {
[HiddenInput(DisplayValue = false)]
public int UserId { get; set; }
[Display(Name = "Name")]
[Required(ErrorMessage = "Please enter the user's name")]
[StringLength(50, ErrorMessage = "User name must not exceed 50 characters")]
public string Name { get; set; }
[DisplayName("Created")]
[DataType(DataType.DateTime, ErrorMessage = "Invalid creation date/time format")]
public DateTime Created { get; set; }
}
首次创建记录时会自动生成“已创建”字段。
在我的用户编辑器页面上,我希望通过在隐藏字段中引用它来保留'Created'值:
@using (Html.BeginForm()) {
@Html.HiddenFor(u => u.userId)
@Html.HiddenFor(u => u.Created)
@Html.LabelFor(u => u.Name)
@Html.TextBoxFor(u => u.Name)
@Html.ValidationMessageFor(u => u.Name)
<input type="submit" value="@action" />
}
这在MVC3中运行良好,但升级到MVC4后,我得到以下验证错误:
创建的字段必须是日期。
如果使用有效的DateTime值正确填充Created隐藏值,则会发生这种情况。此验证似乎是自动应用的,因为消息不是我在验证元数据中定义的消息。
任何人都可以解释发生了什么,以及是否可以恢复到MVC 3的功能。
感谢。