对于具有必填字段的关系,ModelState为false

时间:2016-07-31 20:42:37

标签: asp.net asp.net-core entity-framework-core

我有两个模型Invoice和Client,它们有一对多的关系。我的问题是当我尝试创建新发票时,modelstate变为false,因为未填充Client对象的必填字段。我试图设置默认值,例如int property {get; set;} = 1;但是当我尝试检索关系模型时,这会导致覆盖属性值。我是asp.net的新手,我们将不胜感激。

这是我的客户端型号代码:

public class Client
{
    public int ClientId { get; set; }//Primary key

    [Required]
    [Display(Name = "Client/Company Name")]
    public string Name { get; set; }

    //.....


    public List<Invoice> Invoices { get; set; }

}

发票型号:

public class Invoice
{
    public int InvoiceId { get; set; }//Primary key

    [Required]
    [Display(Name = "Client/Company Name")]
    public int ClientId { get; set; }//Foreign key
    public Client client { get; set; }

    //....

}

我保存发票的代码:

[HttpPost]//Save quote & redirect to edit quote
    public IActionResult Create(Invoice quote)
    {
        ViewData["Title"] = "Create Quotation";//Set title of the view!

        if (ModelState.IsValid)//If quote is validated to true.
        {
            _context.Invoices.Add(quote);//insert quote
            _context.SaveChanges();

            //Redirect to edit page to add items to the invoice
            return RedirectToAction("Edit", new { id = quote.InvoiceId });
        }

        //...
    }

我的代码用于检索具有客户名称的发票

public IActionResult Index()
    {
        ViewData["Title"] = "Quotations";//Set title of the view!
        //Return with array of all quotations.
        return View(_context.Invoices.Include(i => i.client).Where(i => i.isQuote == true).ToArray());
    }

任何提示或帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

找到一个更简单的解决方案:

只需添加virtual关键字和GG

即可 发票模型中的

public class Invoice
{
    public int InvoiceId { get; set; }//Primary key

    [Required]
    [Display(Name = "Client/Company Name")]
    public int ClientId { get; set; }//Foreign key
    public virtual Client client { get; set; }

    //....

}
相关问题