1. ホーム
  2. asp.net-mvc

.net MVC Html.CheckBoxForの正しい使い方

2023-08-21 21:01:29

質問

私が知りたいのは、このメソッドの適切な構文です。 Html.CheckBoxFor HTMLヘルパーの適切な構文です。

私が達成しようとしているのは、チェックボックスがID値で初期チェックされ、コントローラでそれを参照し、まだチェックされているかどうかを確認できるようにすることです。

以下のような構文が適切でしょうか?

@foreach (var item in Model.Templates) 
{ 
    <td> 
        @Html.CheckBoxFor(model => true, item.TemplateId) 
        @Html.LabelFor(model => item.TemplateName)
    </td> 
}

どのように解決するのですか?

それは適切な構文ではありません

最初のパラメータは ではなく チェックボックスの値ではなく、チェックボックスのためのビューモデルバインディングです。

@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });

最初のパラメータは、モデル内のブール値のプロパティを識別する必要があります(これは であり、値を返す無名メソッドではありません)、2 番目のプロパティは追加の HTML 要素属性を定義します。上記の属性がチェックボックスを初期チェックすることを100%確信しているわけではありませんが、試すことは可能です。しかし、注意してください。有効なモデルデータを読み込んだときに、そのプロパティが false .

正しい方法

私の 正しい提案 に初期化された特定のブール値プロパティを持つ初期化されたモデルをビューに提供することでしょう。 true .

プロパティの種類

Asp.net MVCに準ずる HtmlHelper 拡張メソッドと内部動作によると、チェックボックスは整数値ではなくブール値にバインドする必要があります。その場合、隠しフィールドに id .

その他のヘルパー

もちろん、チェックボックスの値や動作についてより柔軟に対応するために使用できる他のヘルパーメソッドもあります。

@Html.CheckBox("templateId", new { value = item.TemplateID, @checked = true });

ノート : checked はHTML要素のbooleanプロパティであり、value属性ではないので、どんな値でも代入できることを意味します。正しいHTML構文には代入は含まれませんが、HTML要素のプロパティとしてレンダリングされる未定義のプロパティを持つ匿名C#オブジェクトを提供する方法がないのです。