我有一个复选框,用户可以在其中选择可以提供给公司的许多服务。我可以保存服务,一切正常。这些服务通过公司服务表链接到公司,该表作为公司 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)
,