[英]Create Bulk Records in Asp.Net Core 2.1.0 Razor Page
我想通過執行以下操作來更新默認方案,一次插入多個記錄。
在“表單提交”上,要提交到列表/表並顯示在同一頁面上的數據。 可能正在使用Ajax或服務器端。
在“最終提交”上,將所有記錄插入數據庫。
我的實體
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();
}
我已經找到了使用Session
和List<T>
的解決方案。
再添加一個Input
按鈕,以處理要存儲在Session
的數據,方法是使用asp-page-handler="AddtoList"
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();
.cshtml
和Session
可用。 重復它直到您的列表完成。 List<T>
並進行數據庫保存或任何您想要的操作。 注意:以下是在Asp.Net Core
進行會話的代碼
在Startup.cs
, Configuration
方法,
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.