フォームにチェックボックスがあります
モデルに追加しました
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" })
しかし、私は間違いを犯します
どうしましたか?
CheckBoxFor
はbool
を受け取り、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);
}
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) })
}
このコードを使用してください:
@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" })
}
同時にチェックボックスを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 :
希望、それが役立ちます