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]()
Что не так?
Ответы
Ответ 1
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);
}
Ответ 2
Html.CheckBoxFor
ожидает a 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
Если только один флажок должен быть установлен в одно и то же время, используйте 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...
Если еще один может быть проверен в одно и то же время, используйте отличное расширение: CheckBoxListFor:
Надеюсь, это поможет
Ответ 4
Используйте этот код:
@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" })
}