我想通过执行以下操作来更新默认方案以一次插入多个记录。
在“表单提交”上,要提交到列表/表并显示在同一页面上的数据。可能正在使用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>
这里一切都可以将单个记录插入数据库。
请向我建议实现这一目标的方法。
答案 0 :(得分:0)
没有任何直接的方法。
您可以使用将整个对象存储在客户端的库。即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();
}
答案 1 :(得分:0)
我找到了使用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();