예제 #1
0
        internal string GetChangedAndOldValuesRendering(string prefix, HtmlHelper <TModel> htmlHelper)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(BasicHtmlHelper.SafeHidden(htmlHelper, BasicHtmlHelper.AddField(prefix, "$.Item.Changed"), this.Item.Changed).ToString());
            if (this.Item != null && this.Item.OldValue != null)
            {
                prefix = BasicHtmlHelper.AddField(prefix, "$.Item.OldValue");
                if (fieldsToStore != null)
                {
                    foreach (LambdaExpression l in fieldsToStore)
                    {
                        object val  = null;
                        string name = ExpressionHelper.GetExpressionText(l);
                        try
                        {
                            val = l.Compile().DynamicInvoke(this.Item.OldValue);
                        }
                        catch
                        {
                        }
                        if (val is IConvertible || val is Guid)
                        {
                            string res = BasicHtmlHelper.SafeHidden(htmlHelper,
                                                                    BasicHtmlHelper.AddField(prefix, name), val).ToString();
                            sb.Append(res);
                        }
                        else
                        {
                            MVCControlsToolkit.Controls.Bindings.ModelTranslatorLight model = new MVCControlsToolkit.Controls.Bindings.ModelTranslatorLight();
                            model.ImportFromModel(val);
                            sb.Append(BasicHtmlHelper.RenderDisplayInfo(htmlHelper, typeof(MVCControlsToolkit.Controls.Bindings.ModelTranslatorLight),
                                                                        BasicHtmlHelper.AddField(prefix, name)));
                            string res = BasicHtmlHelper.SafeHidden(htmlHelper,
                                                                    BasicHtmlHelper.AddField(prefix, name + ".$.JSonModel"), model.JSonModel).ToString();
                            sb.Append(res);
                        }
                    }
                }
                else
                {
                    Stack <object> recursionControl = new Stack <object>();
                    recursionControl.Push(this.Item.OldValue);
                    addObjectPropertiesTorender(prefix, htmlHelper, sb, propertiesToStore, this.Item.OldValue, recursionControl);
                    recursionControl.Pop();
                }
            }
            return(sb.ToString());
        }
예제 #2
0
 private void addObjectPropertiesTorender(string prefix,
                                          HtmlHelper <TModel> htmlHelper,
                                          StringBuilder sb,
                                          PropertyInfo[] propertiesToStore,
                                          object obj,
                                          Stack <object> recursionControl)
 {
     foreach (PropertyInfo pi in propertiesToStore)
     {
         if (pi.GetIndexParameters().GetLength(0) > 0)
         {
             continue;
         }
         object val = pi.GetValue(obj, new object[0]);
         if (val is IConvertible)
         {
             string res = BasicHtmlHelper.SafeHidden(htmlHelper,
                                                     BasicHtmlHelper.AddField(prefix, pi.Name), val).ToString();
             sb.Append(res);
         }
         else if (val is IEnumerable)
         {
             bool recursion = false;
             foreach (object ob in recursionControl)
             {
                 if (object.ReferenceEquals(val, ob))
                 {
                     recursion = true;
                 }
                 ;
             }
             if (recursion)
             {
                 continue;
             }
             recursionControl.Push(val);
             addIEnumerablePropertiesTorender(
                 BasicHtmlHelper.AddField(prefix, pi.Name),
                 htmlHelper,
                 sb,
                 val as IEnumerable,
                 recursionControl);
             recursionControl.Pop();
         }
         else if (val != null)
         {
             bool recursion = false;
             foreach (object ob in recursionControl)
             {
                 if (object.ReferenceEquals(val, ob))
                 {
                     recursion = true;
                 }
             }
             if (recursion)
             {
                 continue;
             }
             recursionControl.Push(val);
             addObjectPropertiesTorender(
                 BasicHtmlHelper.AddField(prefix, pi.Name),
                 htmlHelper,
                 sb,
                 BasicHtmlHelper.GetPropertiesForInput(val.GetType()), val, recursionControl);
             recursionControl.Pop();
         }
     }
 }
예제 #3
0
        private void addIEnumerablePropertiesTorender(
            string prefix,
            HtmlHelper <TModel> htmlHelper,
            StringBuilder sb,
            IEnumerable en,
            Stack <object> recursionControl)
        {
            int i = 0;

            foreach (object obj in en)
            {
                if (obj == null)
                {
                    i++;
                    continue;
                }

                if (obj is IEnumerable)
                {
                    bool recursion = false;
                    foreach (object ob in recursionControl)
                    {
                        if (object.ReferenceEquals(obj, ob))
                        {
                            recursion = true;
                        }
                    }
                    if (recursion)
                    {
                        continue;
                    }
                    recursionControl.Push(obj);
                    addIEnumerablePropertiesTorender(
                        string.Format("{0}[{1}]", prefix, i),
                        htmlHelper,
                        sb,
                        obj as IEnumerable,
                        recursionControl);
                    recursionControl.Pop();
                }
                else if (obj is IConvertible)
                {
                    string res = BasicHtmlHelper.SafeHidden(htmlHelper,
                                                            string.Format("{0}[{1}]", prefix, i), obj).ToString();
                    sb.Append(res);
                    i++;
                }
                else
                {
                    bool recursion = false;
                    foreach (object ob in recursionControl)
                    {
                        if (object.ReferenceEquals(obj, ob))
                        {
                            recursion = true;
                        }
                    }
                    if (recursion)
                    {
                        continue;
                    }
                    recursionControl.Push(obj);
                    addObjectPropertiesTorender(
                        string.Format("{0}[{1}]", prefix, i),
                        htmlHelper,
                        sb,
                        BasicHtmlHelper.GetPropertiesForInput(obj.GetType()),
                        obj,
                        recursionControl);
                    recursionControl.Pop();
                }
            }
        }