protected string RenderPackedList() { PackedList <IEnumerable <TValue>, TValue> displayModel = new PackedList <IEnumerable <TValue>, TValue>(); displayModel.ImportFromModel(Value, new object[] { DualSelect_Separator }); StringBuilder sb = new StringBuilder(); sb.Append(BasicHtmlHelper.RenderDisplayInfo(CurrHtmlHelper, typeof(PackedList <IEnumerable <TValue>, TValue>), Prefix)); sb.AppendFormat("<span {2} style='display:none' id='{1}' is-item-control='true' pname='{0}' data-element-type = 'DualSelect' ></span>", _fullprefix, BasicHtmlHelper.IdFromName(_fullprefix), BasicHtmlHelper.GetAttributesString(AttributeExtensions)); sb.Append( CurrHtmlHelper.Hidden(BasicHtmlHelper.AddField(Prefix, "$.Separator"), DualSelect_Separator, new RouteValueDictionary { { "data-elementispart", "true" } })).ToString(); sb.Append(CurrHtmlHelper.Hidden( BasicHtmlHelper.AddField(Prefix, "$.PackedValue"), displayModel.PackedValue, new RouteValueDictionary { { "data-elementispart", "true" } })); return(sb.ToString()); }
public static MvcHtmlString PackedListFor <TModel, TValue>( this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, IEnumerable <TValue> > > expression, string separator, object attributes = null, bool useHidden = false, bool useTemplate = false, object template = null) { var fullPropertyPath = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName( ExpressionHelper.GetExpressionText(expression)); var propertyPath = ExpressionHelper.GetExpressionText(expression); if (expression == null) { throw (new ArgumentNullException("expression")); } if (separator == null) { throw (new ArgumentNullException("separator")); } if (attributes == null) { attributes = new { } } ; IEnumerable <TValue> values = null; try { values = expression.Compile().Invoke(htmlHelper.ViewData.Model); } catch { } if (values == null) { values = new List <TValue>(); } PackedList <IEnumerable <TValue>, TValue> displayModel = new PackedList <IEnumerable <TValue>, TValue>(); displayModel.ImportFromModel(values, new object[] { separator }); StringBuilder sb = new StringBuilder(); sb.Append(BasicHtmlHelper.RenderDisplayInfo(htmlHelper, typeof(PackedList <IEnumerable <TValue>, TValue>), propertyPath)); sb.Append(htmlHelper.Hidden(BasicHtmlHelper.AddField(propertyPath, "$.Separator"), separator)).ToString(); if (useTemplate) { if (template == null) { template = typeof(PackedList <IEnumerable <TValue>, TValue>).Name; } ViewDataDictionary <PackedList <IEnumerable <TValue>, TValue> > dataDictionary = new ViewDataDictionary <PackedList <IEnumerable <TValue>, TValue> >(displayModel); dataDictionary.TemplateInfo.HtmlFieldPrefix = BasicHtmlHelper.AddField(fullPropertyPath, "$"); sb.Append(new TemplateInvoker <PackedList <IEnumerable <TValue>, TValue> >(template) .Invoke(htmlHelper, dataDictionary)); } else { if (useHidden) { sb.Append(htmlHelper.Hidden( BasicHtmlHelper.AddField(propertyPath, "$.PackedValue"), displayModel.PackedValue, attributes)); } else { sb.Append(htmlHelper.TextBox( BasicHtmlHelper.AddField(propertyPath, "$.PackedValue"), displayModel.PackedValue, attributes)); } } return(MvcHtmlString.Create(sb.ToString())); } }