Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP MVC数据批注和数据库空值_Asp.net Mvc_Data Annotations - Fatal编程技术网

Asp.net mvc ASP MVC数据批注和数据库空值

Asp.net mvc ASP MVC数据批注和数据库空值,asp.net-mvc,data-annotations,Asp.net Mvc,Data Annotations,我有一个asp mvc 5项目,并使用代码优先和数据迁移创建了数据库 这是我目前的产品POCO类 public class Product { [Key] public int ProductId { get; set; } [Required(ErrorMessage = "Please add a product name.")] [StringLength(50)] public string Name { get; set; } publ

我有一个asp mvc 5项目,并使用代码优先和数据迁移创建了数据库

这是我目前的产品POCO类

public class Product
{
    [Key]
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please add a product name.")]
    [StringLength(50)]
    public string Name { get; set; }
    public string Code { get; set; }

    [DataType(DataType.MultilineText)]
    public string Description { get; set; }
    public string Features { get; set; }
    public decimal Price { get; set; }
    public bool? Promotion { get; set; }

    [Display(Name = "Category")]
    public int CategoryId { get; set; }
    public virtual Category Category { get; set; }

    [Display(Name = "Brand")]
    public int BrandId { get; set; }
    public virtual Brand Brand { get; set; }

    public byte[] ImageData { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ImageMimeType { get; set; }
}
在数据库中,唯一不为null的值是主键和名称。我对价格类别品牌字段有问题。在表单中,所有3个仍然是“必需的”,并且ModelState没有与jqueryval.js一起传递,这表明需要添加这些值

如图所示,表单将首先显示需要添加的price&name值。添加这些值后,单击“创建”。然后我才被要求为品牌和品类增加价值。如下图所示

似乎由于某种原因,品牌和类别在第一次单击时没有被验证,但除此之外,这些值不应该被添加,因为它们在数据库中是空值,但是模型仍然要求添加它们。只是想知道是否有人对此有任何见解。是否可以添加一个类似的数据注释

[Required(this = false)]
来覆盖这个

还有,我怎样才能在第一次提交时确认品牌和类别


谢谢。

您需要将想要的属性设置为可空类型的可选属性

public decimal? Price { get; set; }
public int? CategoryId { get; set; }
public int? BrandId { get; set; }

这样,验证程序将不会触发。。。如果你想一想,这是有道理的。。。int的默认值是0。。。但实际上您希望数据库中有空字符串。

要允许空字符串,只需添加这些注释即可

[DisplayFormat(ConvertEmptyStringToNull = false)]
[Required(AllowEmptyStrings =true)]