我在Eposver中有一个继承自LongString的自定义属性。属性的值首次保存并正确检索。但是在连续保存时,值不会更新,在SaveData()之前,属性LoadData()继续调用并将值重置为旧值,因此没有新值保存到DB。 我已经引用了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;
}
Sanjay Zalke
答案 0 :(得分: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()
答案 1 :(得分:1)
回答可能有点迟,但幸运的是,当时我偶然发现了Anders Hattestad的文章here。对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文件夹中。