我遵循了kentico文档中的"开发自定义表单控件"并构建了一个自定义列表框。我在代码隐藏上动态添加了列表框,而不是直接将其添加到代码隐藏 (ascx( 上。我在其中一个 Web 部件上使用列表框,当我选择多个项目时,一切正常。但是,当我单击以编辑 Web 部件时,所有选定项都消失了,列表框将返回到其原始形式(未选择任何项(。因此,我想知道 kentico 如何在 Web 部件中保存表单控件的旧数据。
在下面的代码中,我用一个简短的版本重新创建了我的场景。我在面板下动态添加列表框。
protected void EnsureItems()
{
// Create item and list box
ListBox tab = new ListBox();
ListItem item = new ListItem();
item.Text = "test";
tab.Items.Add(item);
panel.Controls.Add(tab);
}
protected void Page_Load(object sender, EventArgs e)
{
EnsureItems();
}
每个表单控件都应继承自 FormEngineUserControl。然后,Kentico 利用 Value 属性来存储和检索数据库中的值。下面是示例:
public override object Value
{
get
{
return listBox.SelectedValue;
}
set
{
listBox.SelectedValue = ValidationHelper.GetString(value, string.Empty);
}
}
基本上,你的 getter 应该返回一些要存储在数据库中的值。在资源库中,您应该初始化列表框,填充数据并根据来自数据库的值进行选择。
基本上,窗体控件本身不会将数据保存到数据库中。 窗体控件附加到某个窗体,窗体将数据保存到数据库中。查看有关自定义窗体控件的文档。