如何设置由于多对多关系 MVC 而链接到关联表的多个复选框的值



我有一个复选框,用户可以在其中选择可以提供给公司的许多服务。我可以保存服务,一切正常。这些服务通过公司服务表链接到公司,该表作为公司 ID 和服务 ID。

如果用户单击编辑按钮,我不确定如何在加载时选中这些框。我已经使用 IsCheck 查看了其他选项,但是我无法将属性添加到我的服务模型中,因为它为多家公司提供服务。我该怎么做呢?

我的服务模式

    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<CompanyService> CompanyServices { get; set; }
    public virtual ICollection<TrustService> TrustServices { get; set; }

我的公司服务模式

    [Key]
    [Column(Order =1)]
    public int CompanyId { get; set; }
    [Key]
    [Column(Order =2)]
    public int ServiceId { get; set; }
    public virtual Company Company { get; set; }
    public virtual Service Service { get; set; }

最后是剃刀代码

<div class="col-lg-5">
                <div class="col-12">
                    <ul class="list-group" id="serviceList">
                        <li class="list-group-item service-heading">Services</li>
                        @foreach (var service in Model.Services)
                        {
                            <li class="list-group-item">
                                <input type="checkbox" name="services" value="@service.Id" id="check_@service.Id" />
                                <label for="check_@service.Id">@service.Name</label>
                            </li>
                        }
                    </ul>
                </div>
            </div>

我是否需要在我的公司服务表上创建一个 IsChecked,并尝试从那里分配选中的值?如果是这样,我该怎么做?

我是否需要在我的公司服务表上创建一个 IsCheck 并尝试 并从那里分配检查值?如果是这样,我该怎么做?

是的,您需要在模型中创建boolean类型的属性,以便可以使用 Razor 的强类型 HTML 帮助程序进行复选框。

更新的代码如下。

<div class="col-lg-5">
                <div class="col-12">
                    <ul class="list-group" id="serviceList">
                        <li class="list-group-item service-heading">Services</li>
                        @for (int i = 0; i < Model.Services.Count; i++)
                        {
                            <li class="list-group-item">
                             @Html.HiddenFor(model=>model.Services[i].Id)
                             @Html.CheckBoxFor(model=>model.Services[i].IsChecked)
                          
                                <label for="@Html.IdFor(model=>model.Services[i].IsChecked)">@Model.Services[i].Name</label>
                            </li>
                        }
                    </ul>
                </div>
            </div>

PS:请注意 Id 的 HiddenFor 助手 . 它将在服务器端维护Id与其复选框值(选中/未选中)之间的关系以进行模型绑定。

对于初学者来说,不要使用foreach。 它不会为模型创建正确的绑定,将值绑定回模型。 使用 for,如for (int i = 0; i < Model.Services.Count; i++)

其次,需要在复选框中使用索引器。

最后,使用 CheckboxBox 如 @Html.CheckboxFor(x => x.Services[i].Id)

最新更新