2010-11-05 2 views
1

У меня есть пользовательское свойство в 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; 
    } 

Санджай Zalke

ответ

1

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

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

Спасибо.

Edit:

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

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

Я считаю, что вы должны установить 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()

+0

Привет, Джеймс, я пробовал ваше решение, но, к сожалению, это не сработало. Не знаю, почему. В любом случае, спасибо –

Смежные вопросы