Comment puis-je créer une checkboxList dans asp.net MVC et ensuite gérer l'événement avec la checkboxList ?
Réponses
Trop de publicités?Vous pouvez avoir un modèle de vue :
public class MyViewModel
{
public int Id { get; set; }
public bool IsChecked { get; set; }
}
Un contrôleur :
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new MyViewModel { Id = 1, IsChecked = false },
new MyViewModel { Id = 2, IsChecked = true },
new MyViewModel { Id = 3, IsChecked = false },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> model)
{
// TODO: Handle the user selection here
...
}
}
Une vue ( ~/Views/Home/Index.cshtml
) :
@model IEnumerable<AppName.Models.MyViewModel>
@{
ViewBag.Title = "Home Page";
}
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="OK" />
}
et le modèle d'éditeur correspondant ( ~/Views/Home/EditorTemplates/MyViewModel.cshtml
) :
@model AppName.Models.MyViewModel
@Html.HiddenFor(x => x.Id)
@Html.CheckBoxFor(x => x.IsChecked)
Lorsque vous soumettez le formulaire, vous obtenez une liste de valeurs et, pour chacune d'entre elles, la mention "coché" ou "non coché".
Il existe un moyen encore plus simple : utiliser l'extension personnalisée @Html.CheckBoxList() que vous trouverez ici : http://www.codeproject.com/KB/user-controls/MvcCheckBoxList_Extension.aspx
Exemple d'utilisation (vue MVC3 avec moteur de vue Razor) :
@Html.CheckBoxList("NAME", // NAME of checkbox list
x => x.DataList, // data source (list of 'DataList' in this case)
x => x.Id, // field from data source to be used for checkbox VALUE
x => x.Name, // field from data source to be used for checkbox TEXT
x => x.DataListChecked // selected data (list of selected 'DataList' in thiscase),
// must be of same data type as source data or set to 'NULL'
)