Esempio n. 1
0
        private static MvcHtmlString selectListFor <TPageModel, TProperty, TSourceDataModel>
        (
            HtmlHelper <TPageModel> html,
            Expression <Func <TPageModel, TProperty> > propertyExpression,
            Expression <Func <TPageModel, TSourceDataModel> > sourceEntityExpression,
            string bindValuePropertyName,
            string bindTextPropertyName,
            Expression <Func <TSourceDataModel, bool> > filter,
            Func <IQueryable <TSourceDataModel>, IOrderedQueryable <TSourceDataModel> > orderBy,
            bool insertDefaultOption,
            string defaultOptionText,
            string defaultOptionValue
        ) where TSourceDataModel : class
        {
            PropertyInfo          valueProperty = SelectListHelper.GetSelectListValuePropertyInfo(typeof(TSourceDataModel), bindValuePropertyName);
            PropertyInfo          textProperty  = SelectListHelper.GetSelectListTextPropertyInfo(typeof(TSourceDataModel), bindTextPropertyName);
            ModelMetadata         metadata      = ModelMetadata.FromLambdaExpression <TPageModel, TProperty>(propertyExpression, html.ViewData);
            string                value         = (metadata.Model == null ? "0" : metadata.Model.ToString());
            List <SelectListItem> list          = SelectListHelper.GetSelectListItems <TSourceDataModel>(valueProperty, textProperty, value, filter, orderBy);

            if (insertDefaultOption)
            {
                list.Insert(0, new SelectListItem {
                    Text = defaultOptionText, Value = defaultOptionValue
                });
            }
            return(html.DropDownListFor(propertyExpression, list));
        }
Esempio n. 2
0
        public static IHtmlString Render(HtmlHelper html, ISelectListBuilder selectListBuilder, FormGroupDisplay display, string expressionText, Func <MvcHtmlString> hiddenField)
        {
            bool readOnlyMode = display == FormGroupDisplay.ReadOnly, labelWithHiddenFieldMode = display == FormGroupDisplay.LabelWithHiddenField;

            if (readOnlyMode || labelWithHiddenFieldMode)
            {
                var builder = new HtmlTagBuilder("div");

                builder.Attr(selectListBuilder.HtmlAttributes);

                IEnumerable <SelectListItem> selectList = SelectListHelper.GetSelectListItems(html, selectListBuilder, expressionText);

                builder.InternalBuilder.InnerHtml = GetDisplayText(selectList);

                if (labelWithHiddenFieldMode)
                {
                    builder.InternalBuilder.InnerHtml += hiddenField();
                }

                return(MvcHtmlString.Create(builder.ToHtmlString()));
            }

            return(selectListBuilder.AddClass("form-control"));
        }