问题描述
我正在尝试构建一个视图,在一个视图中包含所有(创建、编辑、删除和索引),即索引。
问题在于编辑。始终向控制器返回 null,如 gif 所示。
我知道问题出在哪里,但我无法解决。 hr行后问题末尾的解释
模型引导类别
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 Guid Id { get; set; }
public string Category { 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);
}
在 viewmodel VMBPcategoris
问题,我从这个列表中得到了 Category 值的列表
public List<BootstrapCategory>bootstrapCategories { get; set; }
public Guid Id { get; set; }
public string Category { get; set; }
所以它返回 Null
但是,如果我将 asp-for="@item.Category" 更改为
asp-for="Category" 输入获取空值,但返回编辑后的值不为空
**这是我的问题 >> 我可以使用 asp-for 从中获取价值吗
public List<BootstrapCategory> bootstrapCategories { get; set; }
并将值设置为
public Guid Id { get; set; }
public string Category { get; set; }
因为,
使用 asp-for="@item.Category" 有利于获取类别值,但不适用于设置值。
并且使用 asp-for="Category" 有利于设置类别值,但不利于获取值。
解决方法
最后,我找到了一个非常简单的解决方案。
获取我使用的值
value="@item.Category"
并设置我使用的值
asp-for="Category"
就是这样...
<input asp-for="Category" value="@item.Category" class="form-control">
这样,我可以从一个模型中获取一个值并将一个值设置到另一个模型中