Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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()));
        }
    }