问题描述
我正在尝试构建一个视图,在一个视图中包含所有(创建、编辑、删除和索引),即索引。
问题在于编辑。始终向控制器返回 null,如 gif 所示。
模型引导类别
public class BootstrapCategory
{
[Key]
public Guid Id { get; set; }
[MaxLength(20)]
[required]
public string Category { get; set; }
}
viewmodel VMBPategoris
public class VMBPCategoris
{
public List<BootstrapCategory> bootstrapCategories { get; set; }
public BootstrapCategory bootstrapCategory { get; set; }
}
视图
注意:不要通过表格中的常用按钮进行编辑,而是通过另一个按钮进行编辑 按钮,如 gif 所示
@model VMBPCategoris
@foreach (var item in Model.bootstrapCategories)
{
<tr>
<td>
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="@item.Id" />
<div class="@item.Id d-none">
<div class="input-group">
<input id="btnGroupEdit" type="submit" value="Save" class="input-group-text btn btn-primary" />
<input asp-for="@item.Category" class="form-control" aria-label="Input group example" aria-describedby="btnGroupEdit">
</div>
<span asp-validation-for="@item.Category" class="text-danger"></span>
</div>
</form>
<div class="@item.Id">
@Html.displayFor(modelItem => item.Category)
</div>
</td>
<td>
<a href="@item.Id" class="ToggleEdit">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit([Bind("Id,Category")] BootstrapCategory bootstrapCategory)
{
_context.Update(bootstrapCategory);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
//return View(vMBPCategoris);
}
解决方法
视图模型类 VMBPCategoris 需要将其成员属性分配给构造函数中的实例:
public class VMBPCategoris
{
public List<BootstrapCategory> bootstrapCategories { get; set; }
public BootstrapCategory bootstrapCategory { get; set; }
public VMBPCategoris()
{
bootstrapCategories = new List<BootstrapCategory>();
bootstrapCategory = new BootstrapCategory();
}
}
,
您可以为输入标签命名。更改您的表单,如下所示。
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="@item.Id" name="Id"/>
<div class="@item.Id d-none">
<div class="input-group">
<input id="btnGroupEdit" type="submit" value="Save" class="input-group-text btn btn-primary" />
<input asp-for="@item.Category" name="Category" class="form-control" aria-label="Input group example" aria-describedby="btnGroupEdit">
</div>
<span asp-validation-for="@item.Category" class="text-danger"></span>
</div>
</form>
,
我通过对 ViewModel 进行一些更改并使用 value 属性从模型中获取值并使用 asp-for 将值设置为另一个模型来制作了一个简单的解决方案。
这一切都在Stackoverflow post