Exemplo n.º 1
0
        /// <summary>
        /// Cria lista de checkboxes para uma propriedade que é um enumerador.
        /// </summary>
        /// <typeparam name="TModel">Tipo da model</typeparam>
        /// <typeparam name="TProperty">Tipo da propriedade</typeparam>
        /// <param name="htmlHelper">propriedade html helper</param>
        /// <param name="expression">Expressão linq</param>
        /// <returns>Dropdown list representando uma propriedade do tipo enumerador.</returns>
        public static MvcHtmlString FlagsCheckboxList <TModel, TProperty>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TProperty> > expression) where TModel : class where TProperty : struct
        {
            string inputName = SelectExtensions.GetInputName(expression);
            var    value     = htmlHelper.ViewData.Model == null
                ? default(TProperty)
                : expression.Compile()(htmlHelper.ViewData.Model);

            return(MvcHtmlString.Create(htmlHelper.CheckBoxList(inputName, ToSelectList(value, true))));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Binder para enumeradores do tipo Flag
        /// </summary>
        /// <typeparam name="TModel">Tipo do modelo que contém a propriedade</typeparam>
        /// <typeparam name="TProperty">Tipo da propriedade</typeparam>
        /// <param name="model">referência para o modelo</param>
        /// <param name="expression">expressão lambda para acessar a propriedade</param>
        /// <returns>Valor para a propriedade</returns>
        public static TProperty BindFlagsFor <TModel, TProperty>(this TModel model, Expression <Func <TModel, TProperty> > expression) where TModel : class
        {
            string name      = SelectExtensions.GetInputName(expression);
            var    formValue = HttpContext.Current.Request.Form[name];

            if (string.IsNullOrWhiteSpace(formValue))
            {
                return(default(TProperty));
            }

            string value = formValue.Split(',').Aggregate(0, (acc, v) => acc |= Convert.ToInt32(v), acc => acc).ToString();

            return((TProperty)Enum.Parse(typeof(TProperty), value));
        }