web-dev-qa-db-ja.com

asp.net mvc @ Html.CheckBoxFor

フォームにチェックボックスがあります
enter image description here

モデルに追加しました

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace CorePartners_Site2.Models
 {
public class CareerForm
     {
    //....
    public List<CheckBoxes> EmploymentType { get; set; } 
      }
 }

 public class CheckBoxes
 {
     public string Text { get; set; }
     public bool Checked { get; set; }
 }

私のフォームに追加しました

@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_1" })
@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_2" })
@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_3" })

しかし、私は間違いを犯します
enter image description here

どうしましたか?

17
Heidel

CheckBoxForboolを受け取り、List<CheckBoxes>を渡します。あなたがする必要があります:

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, new { id = "employmentType_" + i })
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.DisplayFor(m => m.EmploymentType[i].Text)
}

HiddenForプロパティにもTextを追加していることに注意してください。そうしないと、フォームを投稿したときに失われるため、チェックしたアイテムがわかりません。

コメントに示されているように、ビューが提供されるときにEmploymentTypeリストがnullになるように編集します。アクションメソッドでこれを行うことで、それも設定する必要があります。

public ActionResult YourActionMethod()
{
    CareerForm model = new CareerForm();

    model.EmploymentType = new List<CheckBox>
    {
        new CheckBox { Text = "Fulltime" },
        new CheckBox { Text = "Partly" },
        new CheckBox { Text = "Contract" }
    };

    return View(model);
}
37
mattytommo

Html.CheckBoxForでは、最初のパラメーターとしてFunc<TModel, bool>が必要です。したがって、ラムダはboolを返す必要があり、現在List<Checkboxes>のインスタンスを返しています:

model => model.EmploymentType

各チェックボックスを出力するには、List<Checkboxes>を反復処理する必要があります。

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, 
              new { id = string.Format("employmentType_{0}", i) })
}
3
Oliver

このコードを使用してください:

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, new { id = "YourId" })
}
2
user1968030

同時にチェックボックスを1つだけチェックする必要がある場合は、代わりにRadioButtonForを使用します。

      @Html.RadioButtonFor(model => model.Type,1, new { @checked = "checked" }) fultime
      @Html.RadioButtonFor(model => model.Type,2) party
      @Html.RadioButtonFor(model => model.Type,3) next option...

同時にもう1つをチェックできる場合は、優れた拡張機能を使用します。 CheckBoxListFor

希望、それが役立ちます

1