如何在razor MVC3中绘制一个复选框

时间:2012-06-13 19:59:57

标签: asp.net-mvc-3 razor

@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逻辑的情况下显示我想要的内容。

3 个答案:

答案 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

如果它仍未涵盖您的方案,请查看此前已存在的讨论:

Discussion 1Discussion 2

答案 2 :(得分:0)

您可以使用附加属性Visible自定义复选框的扩展方法,并在创建复选框中传递可见值