如何使用 asp-for 从模型中获取值并将值设置为另一个模型?

问题描述

我正在尝试构建一个视图,在一个视图中包含所有(创建、编辑、删除和索引),即索引。

问题在于编辑。始终向控制器返回 null,如 gif 所示。

我知道问题出在哪里,但我无法解决hr行后问题末尾的解释

enter image description here

我有 Model 和 viewmodel,如下所示。

模型引导类别

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">

这样,我可以从一个模型中获取一个值并将一个值设置到另一个模型中