Objetive:保存在网格上编辑过的多个项目。
问题:不知道如何定义帖子方法。
您好,
我有一个网格/表寄存器我呈现给用户供他更新。这是观点:
@model IEnumerable<Application.Models.Machine>
@{
ViewData["Title"] = "Test";
}
<h2>Management</h2>
<hr />
<table class="table">
<thead>
<tr>
<th>Serial</th>
<th>Store</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<div class="form-group">
<div class="col-md-10">
<input asp-for="@item.MchName" readonly class="form-control" />
<span asp-validation-for="@item.MchName" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<div class="col-md-10">
<select asp-for="@item.StoreID" class="form-control" asp-items="ViewBag.StoreID">
<option value="">-- Seleccione Tienda --</option>
</select>
<span asp-validation-for="@item.StoreID" class="text-danger"></span>
</div>
</div>
</td>
</tr>
}
</tbody>
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
一旦编辑完毕,就应保存并修改寄存器,但我不知道如何在IEnumerable的情况下定义POST方法。
关注Ibro评论:
我已经完成了这个,首先是一个包含该模型的IEnumerable的新类:
public class EditMachineViewModel
{
public IEnumerable<Application.Models.Machine> Machines { get; set; }
}
Sidenote Altough我将IEnumerable公开而不是私有。
至于第二部分,我用这种方式定义了POST方法:
[HttpPost, ActionName("Test")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Test(EditMachineViewModel model)
{
var machinestoUpdate = await _context.Machines;
if (await TryUpdateModelAsync(
machinestoUpdate,
"",
s => s.MchName, s => s.StoreID, s => s.PUnit, s => s.Status))
{
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists, " +
"see your system administrator.");
}
return RedirectToAction("Index");
}
}
这里发生了一些事情:
1 在这一行:
public async Task<IActionResult> Test(EditMachineViewModel model)
错误消息:&#39; MachinesController.Test(EditMachineViewModel)&#39;:并非所有代码路径都返回值
但是,这还没有完成,所以显示错误是很自然的。
2 在这一行:
var machinestoUpdate = await _context.Machines;
错误消息:&#39; DbSet没有&#39; GetAwaiter&#39;的定义,但实际上(按照旧示例)此行应以以下结尾:
.SingleOrDefaultAsync(s => s.Id == id);
但我不认为我可以使用它,因为我没有传递ID。
提前感谢您的帮助。
答案 0 :(得分:0)
您应该为POST使用单独的方法(操作):
[HttpGet, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditPost(int? id)
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditPost(EditMachineViewModel model)
public class EditMachineViewModel
{
public IEnumerable<Application.Models.Machine> Machines { get; set; }
}