出于某种原因,我的标识列“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; }
}
请帮忙。
答案 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; }
}