Если вы хотите включить количество элементов в таблицу InvoiceDetails при добавлении сведений о счете, вам нужно добавить поле ItemCount в таблицу счетов.
Ниже приведен фрагмент основного кода в коде, который я сделал.Вы можете сослаться на
Изменения в таблице счетов-фактур и в таблице invoiceDetail
public class invoice
{
public int Id { get; set; }
public int invoiceNo { get; set; }
public string supplierName { get; set; }
public int ItemCount { get; set; }
public ICollection<invoiceDetail> invoiceItems { get; set; }
}
public class invoiceDetail
{
public int Id { get; set; }
public string itemname { get; set; }
public int quantity { get; set; }
public int InvoiceId { get; set; }
public invoice Invoice { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<invoiceDetail>()
.Property<int>("InvoiceId");
modelBuilder.Entity<invoiceDetail>()
.HasOne(id => id.Invoice)
.WithMany(i => i.invoiceItems)
.HasForeignKey("InvoiceId");
}
На странице просмотра используйте javascript для добавления нескольких деталей счета при добавлении счета-фактуры
@model SaveMultipleRows.Models.invoice
@{
ViewData["Title"] = "Create";
}
<h2>Create</h2>
<hr/>
<div class="form-group">
<label asp-for="invoiceNo" class="control-label"></label>
<input asp-for="invoiceNo" class="form-control" id="invoiceNo"/>
</div>
<div class="form-group">
<label asp-for="supplierName" class="control-label"></label>
<input asp-for="supplierName" class="form-control" id="supplierName"/>
</div>
<table id="tblCustomers" class="table" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th style="width:150px">Item Name</th>
<th style="width:150px">Quantity</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
<tfoot>
<tr>
<td><input type="text" id="txtItemName" /></td>
<td><input type="text" id="txtQuantity" /></td>
<td><input type="button" id="btnAdd" value="Add" /></td>
</tr>
</tfoot>
</table>
<div class="form-group">
<input id="btnCreate" type="submit" value="Create" class="btn btn-default" />
</div>
JavaScript, используйте ajax для отправки данных на контроллер
@section Scripts
{
<script type="text/javascript">
$("#btnAdd").click(function () {
var ItemName = $("#txtItemName");
var Quantity = $("#txtQuantity");
var tBody = $("#tblCustomers > TBODY")[0];
var row = tBody.insertRow(0);
//Add ItemName cell.
var cell = $(row.insertCell(0));
cell.html(ItemName.val());
//Add Quantity cell.
cell = $(row.insertCell(1));
cell.html(Quantity.val());
//Clear the Textboxes.
ItemName.val("");
Quantity.val("");
});
$("body").on("click", "#btnCreate", function () {
//Loop through the Table rows and build a JSON array of invoiceItems.
var invoiceItems = new Array();
$("#tblCustomers TBODY TR").each(function () {
var row = $(this);
var invoiceItem = {};
invoiceItem.ItemName = row.find("TD").eq(0).html();
invoiceItem.Quantity = row.find("TD").eq(1).html();
invoiceItems.push(invoiceItem);
});
//Populate invoice data
var invoice = {};
invoice.invoiceNo = $("#invoiceNo").val();
invoice.supplierName = $("#supplierName").val();
invoice.invoiceItems = invoiceItems;
invoice.ItemCount = invoiceItems.length; //Count the number of invoiceItems
$.ajax({
type: "POST",
url: "/invoices/CreateInvoice",
data: JSON.stringify(invoice),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " record(s) inserted.");
}
});
});
</script>
}
Метод CreateInvoice в контроллере
[HttpPost]
public async Task<IActionResult> CreateInvoice([FromBody] invoice invoice)
{
_context.Add(invoice);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}