J'ai des cases à cocher dans mon formulaire
J'ai ajouté à mon modèle
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; }
}
et ajouté à ma forme
@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" })
mais j'ai l'erreur
Qu'est-ce qui ne va pas?
CheckBoxFor
prend un bool
, vous lui passez un List<CheckBoxes>
. Vous devez faire:
@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)
}
Remarquez que j'ai ajouté une variable HiddenFor
pour la propriété Text
également, sinon vous perdriez cette information lors de la publication du formulaire, de sorte que vous ne sauriez pas quels éléments vous avez cochés.
Modifier, comme indiqué dans vos commentaires, votre liste EmploymentType
est null
lorsque la vue est diffusée. Vous devrez aussi renseigner cela, en faisant cela dans votre méthode d'action:
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
attend un Func<TModel, bool>
comme premier paramètre. Par conséquent, votre lambda doit renvoyer une bool
. Vous renvoyez actuellement une instance de List<Checkboxes>
:
model => model.EmploymentType
Vous devez parcourir le List<Checkboxes>
pour afficher chaque case à cocher:
@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) })
}
Utilisez ce 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" })
}
Si une seule case doit être cochée en même temps, utilisez plutôt 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...
Si vous pouvez en vérifier une autre en même temps, utilisez une excellente extension: CheckBoxListFor :
J'espère que ça va aider