【问题标题】:How to draw a checkbox in razor MVC3如何在剃须刀 MVC3 中绘制复选框
【发布时间】:2012-06-13 19:59:57
【问题描述】:
@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 逻辑的情况下显示我想要的内容。

【问题讨论】:

  • 你会选择答案还是评论他们?

标签: asp.net-mvc-3 razor


【解决方案1】:

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

如果它仍然没有涵盖你的场景,那么看看这个预先存在的讨论:

Discussion 1, Discussion 2

【讨论】:

    【解决方案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>
    

    【讨论】:

    • 你能把 IEnumerable 改成 IList 吗?
    • UI 上的 IList 是一种不好的做法。它应该只是 IEnumerable.
    • ASP.NET MVC 的程序管理器在他的示例中使用 IListModel Binding To A List
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2012-06-23
      • 2011-11-28
      • 2011-07-01
      相关资源
      最近更新 更多