Сохранение значения пользовательского свойства Episerver - PullRequest
1 голос
/ 05 ноября 2010

У меня есть пользовательское свойство в Episerver, унаследованное от LongString.Значение свойства сохраняется в первый раз и извлекается правильно.Но при последующем сохранении значение не обновляется, перед SaveData () свойства LoadData () продолжают вызывать и сбрасывать значение до старого значения, поэтому новое значение не сохраняется в БД.Я сослался на код для решения Itera.MultiProperty и попытался сравнить поток с этим, но все же не повезло.У меня есть панель обновления в настраиваемом свойстве с управлением повторителем, но страница отправляется обратно и вызывает LoadData () перед сохранением.Я использую Episerver 5.2 R2 SP1.Любые указатели или помощь приветствуется.

    public override void LoadData(object value)
    {
        if (value != null)
            _val = value.ToString();
        base.LoadData(_val);
    }

   public override object SaveData(PropertyDataCollection properties)
    {
        return _val;
    }

Санджай Залке

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Возможно, будет немного поздно ответить, но, к счастью, в то время я наткнулся на статью здесь Андерса Хаттестада.Гениальный парень с очень хорошим пониманием EpiServer.

Я унаследовал от его элементов управления и сделал много своих собственных элементов управления, и они работают как шарм.

По запросу Билла, вот окончательный код.Ссылка на статью уже размещена выше:)

using System;
using System.Collections.Generic;
using System.Text;
using EPiServer.Core;
using System.Web.UI.WebControls;
using System.Web.UI;
using EPiServer.PlugIn;
using Itera.Property;
using EPiServer.SpecializedProperties;

namespace MyProject.CustomProperties
{
    [PageDefinitionTypePlugIn]
    public class CategoryList : PropertyMulitBase
    {
        public CategoryList()
            : base()
        {
            EditOption.Add(EditOptions.ShowTopTabs, true);

        }
        #region BasePropertys
        PropertyDataCollection basePropertys;
        public override EPiServer.Core.PropertyDataCollection BasePropertys
        {
            get
            {
                if (basePropertys == null)
                {
                    PropertyDataCollection _new = new PropertyDataCollection();
                    _new.Add("Category", new Category());
                    basePropertys = _new;
                }
                return basePropertys;
            }
        }
        #endregion

    }

    [PageDefinitionTypePlugIn]
    public class CategoryItemList : PropertyMulitBase
    {
        public CategoryItemList()
            : base()
        {
            EditOption.Add(EditOptions.ShowTopTabs, true);

        }
        #region BasePropertys
        PropertyDataCollection basePropertys;
        public override EPiServer.Core.PropertyDataCollection BasePropertys
        {
            get
            {
                if (basePropertys == null)
                {
                    PropertyDataCollection _new = new PropertyDataCollection();
                    _new.Add("Category Item", new PropertyPageReference());
                    basePropertys = _new;
                }
                return basePropertys;
            }
        }
        #endregion

    }


    public class Category : PropertySingleBase
    {

        #region PropertyCollection
        PropertyDataCollection innerPropertyCollection;
        object lockObject = new object();
        protected override PropertyDataCollection InnerPropertyCollection
        {
            get
            {
                if (innerPropertyCollection == null)
                {
                    innerPropertyCollection = new PropertyDataCollection();
                    innerPropertyCollection.Add("Category", new PropertyPageReference());
                    innerPropertyCollection.Add("Customise", new PropertyBoolean());
                    innerPropertyCollection.Add("Category Item", new CategoryItemList());

                }
                return innerPropertyCollection;
            }
            set
            {
                innerPropertyCollection = value;
            }
        }
        #endregion
    }
}

Добавьте это в папку CustomProperties в вашем проекте.

1 голос
/ 22 декабря 2010

Я полагаю, что вы должны сначала установить PropertyLongString.LongString, а затем вызвать базовый метод SaveData.

Попробуйте это:

public override object SaveData(PropertyDataCollection properties)
{
    this.LongString = _val;
    return base.SaveData(properties);
}

Кроме того (с тех пор, как я это посмотрел, прошло некоторое время)для переопределения LoadData у меня есть что-то похожее на следующее:

public override void LoadData(object value)
{
    // I'm sending value off to be used somewhere else.

    base.Value = value;
}

Я не вызываю base.LoadData ()

...