ASP.NET可编辑网格:更新注册表
我已经为此挣扎了一段时间了。我正在构建这个视图: 但是,当我在做了一些更改后点击“更新”按钮时,web将刷新以显示原始值 关于视图:我使用IEnumerable获取此视图,并循环遍历表单中模型中的每个项。然后,在表单内部,有一个只包含一行的表。我这样做是为了将记录中的所有项包装在一个表单中。这是代码的一部分:ASP.NET可编辑网格:更新注册表,asp.net,asp.net-mvc,asp.net-core,http-post,Asp.net,Asp.net Mvc,Asp.net Core,Http Post,我已经为此挣扎了一段时间了。我正在构建这个视图: 但是,当我在做了一些更改后点击“更新”按钮时,web将刷新以显示原始值 关于视图:我使用IEnumerable获取此视图,并循环遍历表单中模型中的每个项。然后,在表单内部,有一个只包含一行的表。我这样做是为了将记录中的所有项包装在一个表单中。这是代码的一部分: @foreach (var item in Model) { <form asp-action="Test" asp-route-id="@
@foreach (var item in Model)
{
<form asp-action="Test" asp-route-id="@item.Id">
<table class="table">
<tbody>
<tr>
<td>
<input type="hidden" asp-for="@item.Id" />
<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>
//more fields
<td>
<input type="submit" value="Update" class="btn btn-default" />
</td>
</tr>
</tbody>
</table>
</form>}
@foreach(模型中的变量项)
{
//更多领域
}
我声明asp操作和asp路由id:
<form asp-action="Test" asp-route-id="@item.Id">
问题:这足够好吗?有什么东西不见了吗
这是Get方法:
public async Task<IActionResult> Test()
{
PopulateMachineTypeDropDownListStore();
return View(await _context.Machines.AsNoTracking().ToListAsync());
}
公共异步任务测试()
{
PopulateMachineTypeDropDownListStore();
返回视图(wait_context.Machines.AsNoTracking().toListSync());
}
问题:我没有向控制器传递任何参数,但是视图将使用IEnumerable列出给定结构后面的项。我应该将任何内容传递给Get方法吗?或者它是这样的吗
这是Post方法:
@model IEnumerable<Application.Models.Machine>
[HttpPost, ActionName("Test")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> TestPost(int? id)
{
if (id == null)
{
return NotFound();
}
var machinetoUpdate = await _context.Machines
.SingleOrDefaultAsync(s => s.Id == id);
if (await TryUpdateModelAsync(
machinetoUpdate,
"",
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("Test");
}
PopulateMachineTypeDropDownListStore();
return View(await _context.Machines.AsNoTracking().ToListAsync());
}
@model IEnumerable
[HttpPost,ActionName(“测试”)]
[ValidateAntiForgeryToken]
公共异步任务TestPost(int?id)
{
if(id==null)
{
返回NotFound();
}
var machinetoUpdate=wait_context.Machines
.SingleOrDefaultAsync(s=>s.Id==Id);
如果(等待TryUpdateModelAsync(
机器更新,
"",
s=>s.MchName,s=>s.StoreID,s=>s.PUnit,s=>s.Status)
{
尝试
{
wait_context.SaveChangesAsync();
}
捕获(DbUpdateException)
{
ModelState.AddModelError(“,”无法保存更改+
请重试,如果问题仍然存在+
“请与系统管理员联系。”);
}
返回操作(“测试”);
}
PopulateMachineTypeDropDownListStore();
返回视图(wait_context.Machines.AsNoTracking().toListSync());
}
问题:我不知道是否因为我从中检索id的实体(以及我用来通过tryupdatemodelsync()更新模型的实体)也被用来与通过视图的模型进行比较,这可能无法正常工作
提前感谢您的帮助。您的模型在更新时是否在服务器上更新?如果是这样,您的意思是视图在刷新后不会立即获得更新的值?模型不会更新。当我点击update时,唯一发生的事情是字段显示了它们在开始时拥有的数据