如何在 Web 部件中保存自定义窗体控件输入数据



我遵循了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 应该返回一些要存储在数据库中的值。在资源库中,您应该初始化列表框,填充数据并根据来自数据库的值进行选择。

基本上,窗体控件本身不会将数据保存到数据库中。 窗体控件附加到某个窗体,窗体将数据保存到数据库中。查看有关自定义窗体控件的文档。

最新更新