Rumah  >  Soal Jawab  >  teks badan

Simpan pengepala invois dan baris invois pada borang penyerahan satu halaman menggunakan .NET Core Razor Pages

1.Arahan

Saya ingin membuka halaman "Buat", mengisi data pengepala invois, mengisi data baris dinamik invois dan menyimpan semuanya dalam satu penyerahan.

(* kod dikemas kini) Saya berjaya menyelesaikan ralat RowList yang tidak membenarkan saya menambah berbilang baris:

Cara menggunakan AddRange untuk memasukkan berbilang baris dalam halaman ASP.NET Core Razor

Sekarang saya mendapat ralat

1.1 Ralat

ArgumentNullException: Nilai tidak boleh batal. (parameter "sumber")

System.Linq.ThrowHelper.ThrowArgumentNullException(ParameterExceptionArgument)

ArgumentNullException: Nilai tidak boleh batal. (parameter "sumber")

System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
System.Linq.Enumerable.Count<TSource>(IEnumerable<TSource> source)
EPIDENT5.Pages.Magazina.Pages_Magazina_Create.<ExecuteAsync>b__28_0() in Create.cshtml

...

@for (int i = 0; i < Model.RowList.Count(); i++)

Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.GetChildContentAsync(bool useCachedResult, HtmlEncoder encoder) Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output) Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.g__Awaited|0_0(tugas tugas, TagHelperExecutionContextexecutionContext, int i, int count) EPIDENT5.Pages.Magazina.Pages_Magazina_Create.ExecuteAsync() dalam Create.cshtml

ViewData["Title"] = "Create";

Saya tahu saya kehilangan sesuatu tetapi tidak faham apa masalahnya.

2 Bagaimana untuk melakukan ini?

3. Kod bahagian hadapan:

<强>

<form method="post">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>


// This is the header table 



                <table class="table table-striped border-0"
                       style="width: 100%; text-align: left;">
                    <thead class="border-0">

 <tr class="border-0">
                    <td class="border-0" style="min-width:100%;">
                        <div class="border border-secondary p-4">
                            <div class="row ">
                                <div style="float:left;width:50%;">
                                    <div class="form-group m-1">
                                        <label asp-for="InvHeader.Cli" class="control-label" style="font-size:80%;">Client</label>
                                        <input asp-for="InvHeader.Cli" class="form-control" value="clients name" />
                                    </div>
                                </div>
                                <div style="float:left;width:25%;">
                                    <div class="form-group m-1">
                                        <input asp-for="InvHeader.InvDate" class="form-control" type="date" value="@(DateTime.UtcNow.Date.ToString("yyyy-MM-dd"))" />
                                        <span asp-validation-for="InvHeader.InvDate" class="text-danger"></span>
                                    </div>
                                </div>
                                <div style="float:left;width:25%;">
                                    <div class="form-group m-1">
                                        <input asp-for="InvHeader.InvNr" class="form-control" value="33" />
                                        <span asp-validation-for="InvHeader.InvNr" class="text-danger"></span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </td>
                </tr>
                    </thead>
                </table>



//This is the dynamic rows table



 <table id="table1" border="0">
            <tr style="font-size:80%;">                  
                <th style="width:50%;">Product</th>
                <th style="width:5%;">qty</th>
                <th style="width:5%;">price</th>
            </tr>
                        foreach (var item in Model.PL)
                {
                    <tr class="border-bottom">                           
                        <td>
                            <select id="Products" asp-for="@Model.PL[@i].ProdId" class="form-control" type="text" name="data[@i][ProdId]" style="width:100%;"    >
                              
                                @foreach (var item in Model.PL)
                                {
                                    <option    value="@item.ProdId"    
                                            qty="@qty"
                                        price="@Convert.ToInt32(item.price)">@item.name,   @Convert.ToInt32(item.price)</option>
                                }
                            </select>
                        </td>
                        <td><input asp-for="@Model.MR[@i].qty" class="form-control" type="text" name="qty[@i]" style="width:100%;" /></td>
                                <td><input asp-for="@Model.MR[@i].price" class="form-control" type="text" name="price[@i]" style="width:100%;" /></td>
                     </tr>
                     </table>
                     
                     </form>

4. Kod hujung belakang

//Bahagian mengikat data

[BindProperty]
    public InvHeader InvHeader { get; set; } = default!;
    public IList<InvRow> RowList { get; set; }

// kaedah onget, di mana id kiraan baris merah

public IActionResult OnGetAsync()
    {

        var rr = new List<InvRow>()
        {
            new InvRow() { Name = "Apple", Qty = 5, Price = 100 },
             new InvRow() { Name = "Peach", Qty = 3, Price = 500 },
              new InvRow() { Name = "Ananas", Qty = 1, Price = 1100 },
        };

        RowList = rr;

        return Page();
    }

// Kaedah onpost

public async Task<IActionResult> OnPostAsync(IList<InvRow> RowList)
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

         _context.InvHeaders.Add(InvHeader);

        await _context.InvRows.AddRangeAsync(RowList);

        await _context.SaveChangesAsync();

        return RedirectToPage("./Index");
    }

P粉298305266P粉298305266203 hari yang lalu393

membalas semua(1)saya akan balas

  • P粉127901279

    P粉1279012792024-03-30 17:33:35

    Pengikatan model mengikat sifat melalui atribut nama. Atribut nama yang betul sepadan dengan parameter sepatutnya kelihatan seperti: addrows[index].propertyName.

    Input yang berkaitan dengan PL 是什么,但似乎只有 qtypriceInvRows dalam model halaman tak tentu. Anda perlu menukar kedua-dua nama input seperti berikut:

    
    

    Jika elemen pilih juga berkaitan dengan model InvRows 模型相关,只需更改 select 名称,例如:addrows[@i].ProdIdInvRows, cuma tukar nama pilih, contohnya:

    addrows[@i].ProdId. Bagaimanapun, nama bergantung pada model anda.

    Selain itu, halaman anda mengandungi pendua foreach dengan nama yang sama, yang tidak betul. Hipotesis sepatutnya:

    @for(int i = 0;i
        
            
        
        
        
    
    }

    Demo kerja penuh anda boleh ikuti:

    Model

    public class InvHeaders
    {
        public int CliId { get; set; }
        public DateTime InvDate { get; set; }
        public string InvNr { get; set; }
    }
    public class InvRows 
    {
        public int qty { get; set; }
        public int price { get; set; }
    }
    public class Product
    {
        public int ProdId { get; set; }
        public string name { get; set; }
        public int price { get; set; }
    }

    Halaman

    @page
    @model IndexModel
    
    
    @for(int i = 0;i }
    Product qty price

    Mockup halaman
    public class IndexModel : PageModel
    {
        [BindProperty]
        public InvHeaders InvHeader { get; set; } = default!;
        [BindProperty]
        public InvRows InvRow { get; set; } = default!;
        public IList MR { get; set; } = default!;
        public List PL { get; set; }
    
        public void OnGet()
        {   
            //hard-coded the value is just for easy testing
            PL = new List()
            {
                new Product(){ProdId=1,name="aa",price=12},
                new Product(){ProdId=2,name="bb",price=16},
                new Product(){ProdId=3,name="cc",price=21}
            };
        }
        public void OnPost(List addrows)
        {
             //do your stuff....
        }
    }

    option 元素中没有 qtypriceSila ambil perhatian bahawa tiada atribut

    qty atau 🎜price dalam elemen 🎜option lalai di bawah, tidak pasti apa yang anda mahu lakukan, tetapi saya perlu mengingatkan anda bahawa ini sesuai tidak berfungsi untuk model yang mengikat sebarang rasa. 🎜

    balas
    0
  • Batalbalas