Ich habe Checkboxen in meinem Formular
Ich habe bei meinem Modell hinzugefügt
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; }
}
und bei meinem Formular hinzugefügt
@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" })
aber ich bekomme den fehler
Was ist falsch?
CheckBoxFor
nimmt eine bool
, Sie übergeben einen List<CheckBoxes>
. Sie müssten tun:
@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)
}
Hinweis Ich habe auch eine HiddenFor
für die Text
-Eigenschaft hinzugefügt. Andernfalls würden Sie diese Einstellung verlieren, wenn Sie das Formular bereitstellen. Sie wissen also nicht, welche Elemente Sie überprüft haben.
Bearbeiten Sie, wie in Ihren Kommentaren gezeigt, Ihre EmploymentType
-Liste null
, wenn die Ansicht bereitgestellt wird. Sie müssen dies auch in Ihrer Aktionsmethode auffüllen:
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
erwartet einen Func<TModel, bool>
als ersten Parameter. Daher muss Ihr Lambda eine bool
zurückgeben. Sie geben derzeit eine Instanz von List<Checkboxes>
zurück:
model => model.EmploymentType
Sie müssen den List<Checkboxes>
durchlaufen, um jedes Kontrollkästchen auszugeben:
@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) })
}
Verwenden Sie diesen Code:
@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" })
}
Wenn nur ein Kontrollkästchen gleichzeitig aktiviert werden soll, verwenden Sie stattdessen 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...
Wenn eine weitere Option gleichzeitig eingecheckt werden kann, verwenden Sie eine ausgezeichnete Erweiterung: CheckBoxListFor :
Hoffe, es wird helfen