.net core 2.0 как создать форму для двух связанных сущностей с подробным разделом - PullRequest
0 голосов
/ 27 ноября 2018

Я довольно новичок в ядре .net и не знаю, как создать форму для обеих сущностей со связанными данными и сохранить данные в dbcontext.Поддержка У меня есть две сущности, как показано ниже:

public partial class invoice
{
    public int Id;
    public int invoiceNo;
    public string supplierName; 
    public ICollection<invoiceDetail> invoiceItems {get;set;}
}

public partial class invoiceDetail
{
    public int Id;
    public int InvoiceId;
    public string itemname;
    public int quantity;
}

Как у меня есть одна страница просмотра, которая позволяет мне добавлять детали счета-фактуры, а также включать количество элементов в таблице InvoiceDetails?Заранее спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Если вы хотите включить количество элементов в таблицу 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));

    }
...