更改为隐藏字段中的MVC 4数据注释

时间:2012-10-29 12:05:49

标签: asp.net-mvc-4 data-annotations asp.net-mvc-migration

我发现从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的功能。

感谢。

0 个答案:

没有答案