/// <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)))); }
/// <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)); }