Asp.net mvc @Html.CheckBoxFor - программирование
Подтвердить что ты не робот

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

Что не так?

4b9b3361

Ответ 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" })
}