MVC3验证

时间:2011-01-28 18:52:07

标签: asp.net-mvc asp.net-mvc-3

出于某种原因,我的标识列“ID”由MVC3验证?当我没有指明它是必需的时候,为什么会发生这种情况。我在我的视图中有这个“@ Html.HiddenFor(model => model.Id)”,这不会引起任何问题。

public class User {
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Email { get; set; }
}

请帮忙。

5 个答案:

答案 0 :(得分:4)

值类型由MVC框架隐式验证。

要将此设置为DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes设置为false。

答案 1 :(得分:1)

我明白了。对于我的类,我有这样的包装器(viewmodel)类:

   public class AdminsEditViewModel<T>
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AdminsEditViewModel"/> class.
        /// </summary>
        public AdminsEditViewModel()
        {
            this.Admin = new Admin();
            this.GroupIn = new List<int>();
            this.GroupNotIn = new List<int>();
        }

        /// <summary>
        /// Gets or sets Admin.
        /// </summary>
        public Admin Admin { get; set; }

我不得不添加这一行:

this.Admin = new Admin();

现在默认隐藏字段得到0.这是正确的:)。 感谢

答案 2 :(得分:0)

您可以在MetaData中指定要排除的属性,如下所示:

 [Bind(Exclude = "Id")]
 public class User {

     [Required]
     public string Name { get; set; }
     [Required]
     public string Email { get; set; }

 }

答案 3 :(得分:0)

或许,只需将其声明为可空,然后让SQL Server处理身份字段的值,并在其上使用null。这就是我一直在做的......

public int? Id { get; set; }

答案 4 :(得分:0)

只需在您的ID

上添加关键字属性即可
public class User {
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Email { get; set; }
}