请教关于webpart自定义属性无法保存值?
大家好!
我要实现webpart属性的自定义,比如,在属性界面里面添加一个dropdownlist,每次改变选择值之后,点击“应用”,能将新的值传给webpart的属性name.问题是,每次点“应用”页面postback后,dropdownlist都会变回第一个值,而页面上也是dropdownlist的第一个值,值的改变并没有生效。
我的实现如下:
在webpart.cs中属性name声明如下:
[Personalizable (PersonalizationScope.Shared)]
[ WebBrowsable (false)] //为了使用自定义的属性界面而不使用默认界面,将其设为false
[ WebDisplayName ("Personalize text data")]
[ WebDescription ("this text box is a personalized webpart")]
public string name { get;set;}
同时,重写了IWebEditable接口:
public override EditorPartCollection CreateEditorParts()
{
ArrayList controlList = new ArrayList();
WebPartEditor ePart = new WebPartEditor();
ePart.ID = this.ID + Guid.NewGuid().ToString();
ePart.Title = "EditorPartTest";
controlList.Add(ePart);
EditorPartCollection baseParts=base.CreateEditorParts ();
return new EditorPartCollection(baseParts, controlList);
}
//////以上是在webpart.cs中实现的
/////以下继承EditorPart写了WebPartEditor.cs
protected override void CreateChildControls()
{
ddl_Text = new DropDownList();
ddl_Text.Items.Add("姓名1");
ddl_Text.Items.Add("姓名2");
Controls.Add(ddl_Text);
}
public override bool ApplyChanges()
{
this.EnsureChildControls();
VisualWebPart1 webPart = WebPartToEdit as VisualWebPart1;
if (webPart != null)
{
webPart.name = this.ddl_Text.SelectedValue;
}
return true;
}
public override void SyncChanges()
{
this.EnsureChildControls();
VisualWebPart1 webPart = WebPartToEdit as VisualWebPart1;
if (webPart != null )
{
this.ddl_Text.SelectedValue = webPart.name;
}
}
我发现每次点击“应用”,WebPartEditor.cs中的CreateChildControls()都会被重新执行一次,也就是dropdownlist控件会重新被创建,原来选择值并没有被保存。
请问有什么办法可以解决这个问题呢?