Criei uma classe e um HTML para fazer um CheckBoxList no MVC. Coloquei na minha biblioteca, a Ak, que está no bitbucket.
A classe:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Ak.MVC.Forms
{
/// <summary>
/// To create a CheckBoxList in Form
/// </summary>
public class CheckBoxList
{
/// <summary>
/// Items of CheckBoxList
/// </summary>
public IEnumerable<CheckBoxItem> Items { get; set; }
/// <summary>
/// Constructor for MVC build
/// </summary>
public CheckBoxList()
{
Items = new List<CheckBoxItem>();
}
/// <summary>
/// Constructor to use in your code
/// </summary>
/// <param name="all">All the items to show</param>
/// <param name="chosen">Just the chosen items IDs</param>
public CheckBoxList(IEnumerable<IListable> all, IEnumerable<Int32> chosen)
: this()
{
Items = all.Select(e => add(e, chosen));
}
private static CheckBoxItem add(IListable item, IEnumerable<Int32> chosen)
{
return new CheckBoxItem
{
ID = item.ID,
Name = item.Name,
Chosen = chosen.Contains(item.ID),
};
}
/// <summary>
/// Get the chosen ids
/// </summary>
public IEnumerable<Int32> GetChosen()
{
return Items.Where(cbi => cbi.Chosen).Select(cbi => cbi.ID);
}
/// <summary>
/// Item for CheckBoxList
/// </summary>
public class CheckBoxItem
{
// ReSharper disable CSharpWarnings::CS1591
public Int32 ID { get; set; }
public String Name { get; set; }
public Boolean Chosen { get; set; }
// ReSharper restore CSharpWarnings::CS1591
}
}
}
O HTML (colar em Views/Shared/EditorTemplates/CheckboxList.cshtml)
@model Ak.MVC.Forms.CheckBoxList
<ul>
@for (var e = 0; e < Model.Items.Count; e++)
{
<li>
@Html.CheckBoxFor(m => m.Items[e].Chosen)
@Html.HiddenFor(m => m.Items[e].ID)
@Html.LabelFor(m => m.Items[e].Chosen, Model.Items[e].Name)
</li>
}
</ul>
Nenhum comentário:
Postar um comentário