0
@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 开头的代码。1. 布局乱了 2. 不显示乱了 一个地方显示复选框,另一个地方显示文字。3. 为每个复选框生成一个隐藏值。

现在的问题是如何在没有@if else 逻辑的情况下显示我想要的内容。

4

3 回答 3

2

要绑定复杂的对象,我们需要为每个项目提供一个索引以确保正确的回发。这就是我们需要将 IEnumerable<> 更改为 IList<> 的原因(或者您可以创建另一个变量并使用 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>
于 2012-06-13T20:07:52.547 回答
2

没有必要重新发明轮子。这是一个非常好的帖子: Asp.net MVC Multiple check-boxes in an array

如果它仍然没有涵盖您的场景,请查看此预先存在的讨论:

讨论1讨论2

于 2012-06-14T03:46:05.467 回答
0

您可以使用属性附加 Visible 自定义 Check box 的扩展方法,并在创建 checkbox 时,传递 visible 的值

于 2012-06-13T20:13:17.837 回答