我正在构建一个通过Entity Framework添加到数据库的表单。我有一切工作......但由于某些原因,当我提交表单时,控制器无法识别应该属于我的Icollection的任何项目的表单条目。
基本上我有一系列产品,用户可以添加越来越多的东西,当他们提交表格时,产品将被添加到ICollection中,并将其添加到Products表中。
在此页面上,数据库上下文中从不存在任何内容,因此我实际上不必获取产品的任何数据。只有一行有空表格,他们可以填写。
以下是我所拥有的...但是当我点击提交时,控制器总是显示产品的NULL。
数据模型
public class AddInvoiceViewModel
{
[Display(Name = "Event Date")]
public DateTime EventDate { get; set; }
[Display(Name = "Invoice Date")]
public DateTime InvoicetDate { get; set; }
....
[Display(Name = "Products")]
public ICollection<InvoiceData> Products { get; set; }
}
控制器
[HttpPost]
public IActionResult Add(AddInvoiceViewModel model)
{
Invoice invoice = new Invoice
{
InvoicetDate = model.InvoicetDate,
EventDate = model.EventDate,
....
Products = model.Products,
};
dataAccess.AddInvoice(invoice);
return View();
}
视图
@using (Html.BeginForm())
{
<table style="">
<tr>
<td>@Html.LabelFor(m => m.InvoicetDate)</td>
<td><input type="date" asp-for="InvoicetDate"></td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.EventDate)</td>
<td><input type="date" asp-for="EventDate"></td>
</tr>
</table>
<table>
<tr>
<th>Item Details</th>
<th>Quantity</th>
<th>Rate</th>
<th>Discount</th>
<th>Tax</th>
<th>Amount</th>
<th> </th>
</tr>
<tr>
<th>Item Details</th>
<td>@Html.TextBoxFor(x => x.Products.FirstOrDefault().Quantity)</td>
<td>@Html.TextBoxFor(x => x.Products.FirstOrDefault().Rate)</td>
<td>@Html.TextBoxFor(x => x.Products.FirstOrDefault().DiscountAmount)</td>
<td>@Html.TextBoxFor(x => x.Products.FirstOrDefault().ItemDetails)</td>
<td>@Html.TextBoxFor(x => x.Products.FirstOrDefault().ItemDetails)</td>
<td>x</td>
</tr>
</table>
<input type="submit" value="Add" class="btn btn-primary">
}
一切正常但发票数据(产品)的收集
我尝试更改项目详细信息,但无论我做什么,Controller总是有空产品。