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 a array

それでもシナリオがカバーされない場合は、この既存の議論を見てください。

ディスカッション 1ディスカッション 2

于 2012-06-14T03:46:05.467 に答える
0

プロパティ追加の Visible を使用して Check box の拡張メソッドをカスタマイズできます。checkbox の作成では、visible の値を渡します。

于 2012-06-13T20:13:17.837 に答える