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