在Razor ASP MVC Core中编辑多个模型的bool属性

在Razor ASP MVC Core中编辑多个模型的bool属性,razor,asp.net-core-mvc,Razor,Asp.net Core Mvc,我有一个最新dotNet核心的MVC项目。该模型有一个bool属性,我想在索引视图中的模型列表中对其进行编辑 例如,如果我有这样一个模型: public class Model { public Guid ID {get; set;} public bool Enabled {get; set;} } @model UpdateEnabledViewModel <form asp-action="UpdateEnabled" method="post"> &l

我有一个最新dotNet核心的MVC项目。该模型有一个bool属性,我想在索引视图中的模型列表中对其进行编辑

例如,如果我有这样一个模型:

public class Model
{
    public Guid ID {get; set;}
    public bool Enabled {get; set;}
}
@model UpdateEnabledViewModel

<form asp-action="UpdateEnabled" method="post">
  <ul>
    @foreach (var item in Model.AvailableItems)
    {
      <li><label><input type="checkbox" name="SelectedItems[]" value="@item.Id" /> @item.Id</label></li>
    }
  </ul>

  <button type="submit">Submit</button>
</form>
我正在尝试创建一个列表,用户只能在其中更新Enabled属性

@model IEnumerable<Model>

@{
    ViewData["Title"] = "Index";
}

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Id)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Enabled)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model) 
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Id)
                </td>
                <td>
                    @Html.EditorFor(modelItem => item.Enabled)
                </td>
        }
    </tbody>
</table>

在用户更新所有复选框后,我可以使用如下按钮

<input type="submit" value="Save" class="btn btn-default" asp-action="UpdateEnabled" />
然后控制器中的一个方法应该获取列表并更新数据库

public async Task UpdateEnabled([Bind("Id,Enabled")] List<Model> models)
{
    var allDbModels = context.Models.ToList();
    foreach (Model modelFromView in models)
    {
        var dbModel = allDbModels.First(dbm => dbm.Id == modelFromView.Id);
        dbModel.Enabled = modelFromView.Enabled;
    }

    await context.SaveChangesAsync();
}
我是MVC的新手,我不知道最好的方法是什么。在前面的代码中,从未调用控制器

我怎样才能做到这一点?在MVC中,最好的方法是什么?
谢谢

我建议您更改发送的数据。只需发送已启用ID的列表,而不是发送包含ID的所有模型对象的列表以及它们是否已启用。你可以这样做:

public class Model
{
    public Guid ID {get; set;}
    public bool Enabled {get; set;}
}
@model UpdateEnabledViewModel

<form asp-action="UpdateEnabled" method="post">
  <ul>
    @foreach (var item in Model.AvailableItems)
    {
      <li><label><input type="checkbox" name="SelectedItems[]" value="@item.Id" /> @item.Id</label></li>
    }
  </ul>

  <button type="submit">Submit</button>
</form>

然后,这将只传输选定的ID,而不是所有带有布尔值的ID,无论它们是否被选中。因此,您在节省流量的同时,让一切变得更轻松。这还允许您在模型中包含更多属性,例如,在复选框旁边显示的标签。

将@Model更改为List。使用a表示int i=0;i