Simpan pengepala invois dan baris invois pada borang penyerahan satu halaman menggunakan .NET Core Razor Pages
P粉298305266
P粉298305266 2024-03-29 20:07:24
0
1
385

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粉298305266
P粉298305266

membalas semua(1)
P粉127901279

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. 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!