quarta-feira, 18 de junho de 2014

CheckBoxList no MVC

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