【发布时间】:2018-01-12 22:16:07
【问题描述】:
我在 dotnet core 的一页上显示了两个表。
- 第一个表只显示数据
- 第二个表格有一个输入字段
问题:
表格中的行数可变(此外,用户可以使用过滤器来缩小显示的数据量)。允许用户在表 2 的每一行添加一个注释,注释存储在与表 2 显示的同一个表中。
我需要遍历 post 数组并只更新已编辑的行,但我无法理解这一点。我对 dotnet core 还是比较陌生。
这是我的代码,对我已经尝试过的内容进行了更多解释:
查看:
@using ASPNET_Core_1_0.Models.TbMapViewModels;
@model TbMapViewModel
@{
}
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-6">
<div class="row">
<div class="col-md-12">
<table class="table table-condensed table-bordered table-hover">
<thead>
<tr>
<td><b>Expense Description</b></td>
<td><b>Dealership</b></td>
<td><b>Unique ADP Code</b></td>
</tr>
</thead>
<tbody>
@foreach (var item in Model.TBMapUniqueADP)
{
<tr>
<td>@item.ExpenseDescriptionU</td>
<td>@item.DealershipU</td>
<td>@item.UniqueAdpU</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
<form asp-action="TbMapViewEdit">
<div class="col-lg-6">
<input type="submit" value="Save" class="btn btn-primary" />
<div class="row">
<div class="col-md-12">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<table class="table table-condensed table-bordered table-hover">
<thead>
<tr>
<td><b>TEMP ID</b></td>
<td><b>Map To</b></td>
<td><b>Accounts Code</b></td>
<td><b>Line</b></td>
<td><b>Map Result</b></td>
</tr>
</thead>
<tbody>
@foreach (var item in Model.TBMapBalances)
{
<tr>
<td><input asp-for="TbMapId" value="@item.TbMapId" disabled/></td>
<td><input asp-for="UniqueAdp" value="@item.UniqueAdp" /></td>
<td>@item.AccountsCode</td>
<td>@item.Line</td>
<td>@item.MapResult</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
</form>
</div>
</div>
来自控制器的位:
这只是为了返回视图:
[Authorize]
public async Task<IActionResult> TbMapView()
{
var model = new TbMapViewModel
{
TBMapBalances = await _context.TBMapBalances.Where(x => x.Dealership == "Derby").ToListAsync(),
TBMapUniqueADP = await _context.TBMapUniqueADP.Where(x => x.DealershipU == "Derby").ToListAsync()
};
return View(model);
}
然后在 POST 上我试图写这个,但是我无法找到任何关于如何访问和循环访问 post 数组的信息。
[Authorize]
[HttpPost]
public async Task<IActionResult> TbMapViewEdit(int Id, TBMapBalances tbMapBalances)
{
if (Id != tbMapBalances.TbMapId)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(tbMapBalances);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TbMapBalancesExists(tbMapBalances.TbMapId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("TbMapView");
}
return RedirectToAction("TbMapView");
}
我知道上面的代码仅适用于您传递特定 ID 并且您有一行要编辑的情况。我试图以它为起点,例如使用List<nameofthefield>,这给了我很多错误。
最大的问题确实是我在这个主题上没有找到 dotnet core,这意味着这非常容易或者我非常密集。
不胜感激!
编辑#1
刚刚在 EditorTemplates 上找到了一些文章,并且会解决这些问题 - 这是正确的方法吗(有些文章适用于 asp.net 而不是 .net 核心)?
https://www.codeproject.com/Questions/768493/How-To-Add-or-Update-Multiple-Rows-And-Save-With-O
http://www.dotnetawesome.com/2013/09/how-to-update-multiple-row-at-once.html
【问题讨论】: