簡體   English   中英

在Asp.Net Core 2.1.0 Razor頁面中創建批量記錄

[英]Create Bulk Records in Asp.Net Core 2.1.0 Razor Page

我想通過執行以下操作來更新默認方案,一次插入多個記錄。

  1. 在“表單提交”上,要提交到列表/表並顯示在同一頁面上的數據。 可能正在使用Ajax或服務器端。

  2. 在“最終提交”上,將所有記錄插入數據庫。

我的實體

public class ItemAttribute
{
    [Key]
    public int ID { get; set; }
    public int ItemID { get; set; }
    public string UoM { get; set; }
    public decimal SaleVal { get; set; }

    [ForeignKey("ItemID")]
    public Item Item { get; set; }
}

我的創建模型

private readonly Test3.Models.Test3Context _context;
    public CreateModel(Test3.Models.Test3Context context)
    { _context = context; }

    public IActionResult OnGet()
    {
        ViewData["ItemID"] = new SelectList(_context.Item, "ItemID", "ItemID");
        return Page();
    }

    [BindProperty]
    public ItemAttribute ItemAttribute { get; set; }

    public async Task<IActionResult> OnPostAsync()
    {
        _context.ItemAttribute.Add(ItemAttribute);
        await _context.SaveChangesAsync();

        return RedirectToPage("./Index");
    }

這是剃刀頁

<form method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="ItemAttribute.ItemID" class="control-label"></label>
            <select asp-for="ItemAttribute.ItemID" class ="form-control" asp-items="ViewBag.ItemID"></select>
        </div>
        <div class="form-group">
            <label asp-for="ItemAttribute.UoM" class="control-label"></label>
            <input asp-for="ItemAttribute.UoM" class="form-control" />
            <span asp-validation-for="ItemAttribute.UoM" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="ItemAttribute.SaleVal" class="control-label"></label>
            <input asp-for="ItemAttribute.SaleVal" class="form-control" />
            <span asp-validation-for="ItemAttribute.SaleVal" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>

此處,所有操作都適用於將單個記錄插入數據庫。

請為我提出實現此目標的方法。

尚無任何直接方法。

您可以使用將整個對象存儲在客戶端的庫。 Knockout JS或Angular JS

並在最后發布所有數據到服務器端

 var data = JSON.stringify({ 'values': values});

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: 'yourURL',
        data: data,
        success: function () {          
            $('#result').html('successfully called.');
        },
        failure: function (response) {          
            $('#result').html(response);
        }
    }); 

並在控制器中:

public async Task<IActionResult> saveData(List<ItemAttribute> data)
{
        foreach(var item in data)
        {
          _context.ItemAttribute.Add(item);
        }
        await _context.SaveChangesAsync();
}

我已經找到了使用SessionList<T>的解決方案。

  1. 再添加一個Input按鈕,以處理要存儲在Session的數據,方法是使用asp-page-handler="AddtoList"

  2. OnPostAddtoList方法,將現有的會話數據加載到List<T>並將新記錄追加到它,然后保存到會話中。

這是OnPostAddtoList()

        var key = "ItemList";
        List<ItemAttribute> TempList = new List<ItemAttribute>();

        var value = HttpContext.Session.GetString(key);
        if (value != null)
        { TempList = JsonConvert.DeserializeObject<List<ItemAttribute>>(value); }

        var ItemAttribute1 = new ItemAttribute { UoM = ItemAttribute.UoM, SaleVal = ItemAttribute.SaleVal};
        TempList.Add(ItemAttribute1);

        ItemAttributeList = TempList;

        HttpContext.Session.SetString(key, JsonConvert.SerializeObject(ItemAttributeList));

        return Page();
  1. 因此,您的列表在.cshtmlSession可用。 重復它直到您的列表完成。
  2. 在最終提交時,將您的會話列表加載到List<T>並進行數據庫保存或任何您想要的操作。

注意:以下是在Asp.Net Core進行會話的代碼

Startup.csConfiguration方法,

services.AddDistributedMemoryCache();
        services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromMinutes(30);
            options.Cookie.HttpOnly = true;
        });

然后在Configure方法中,添加app.UseSession(); app.UseMvc();之前app.UseMvc();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM