@model IEnumerable<FacetValue>
<ul>
@foreach (var association in Model)
{
<li>
**@Html.CheckBox("association",association.IsSelected) @Html.Label("association", association.Text)**
@if (association.IsSelected == true)
{
<input type="checkbox" id="association" class="left" value="@association.Text" checked="checked"/>
}
else
{
<input type="checkbox" id="association" class="left" value="@association.Text"/>
}
<label>@association.Text</label>
</li>
}
</ul>
我正在使用以@if与@htmlCheckBox开头的代码。 布局搞砸了 2.它不显示混乱并在一个地方显示复选框,在另一个地方显示文本。 3.为每个复选框生成一个隐藏值。
现在的问题是如何在没有@if else逻辑的情况下显示我想要的内容。
答案 0 :(得分:2)
要绑定复杂对象,我们需要为每个项目提供索引以确保正确回发。这就是为什么我们需要改变IEnumerable&lt;&gt;到IList&lt;&gt; (或者您可以创建另一个变量并使用Model.ToList()填充它)。我们需要将foreach()更改为for(),因此Html.CheckBoxFor可以正确创建ID和NAME,以确保正确的回发。
@model IList<FacetValue>
<ul>
@for (int i = 0; i < Model.Count(); i++)
{
<li>
@Html.LabelFor(model => model.Model[i].IsSelected, Model[i].Text)
@Html.CheckBoxFor(model => model.Model[i].IsSelected)
</li>
}
</ul>
答案 1 :(得分:2)
没有必要重新发明轮子。 这是一个非常好的帖子: Asp.net MVC Multiple check-boxes in an array
如果它仍未涵盖您的方案,请查看此前已存在的讨论:
答案 2 :(得分:0)
您可以使用附加属性Visible自定义复选框的扩展方法,并在创建复选框中传递可见值