如何在 Web 部件中保存自定义表单控件输入数据?

How to save custom form control input data in web part?

我按照 kentico 文档中的 "Developing Custom Form Control" 构建了一个自定义列表框。我在代码后面动态添加了列表框,而不是直接在代码前面(ascx)添加它。我在我的一个 Web 部件上使用列表框,当我选择多个项目时一切正常。但是,当我单击以编辑 Web 部件时,所有选定的项目都消失了,列表框返回到其原始形式(未选定项目)。因此,我想知道kentico如何在web part中保存表单控件的旧数据。

在下面的代码中,我用一个简短的版本重新创建了我的场景。我在面板下动态添加列表框。

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 应该 return 一些值存储在数据库中。在 setter 中,您应该初始化列表框,填充数据并根据来自数据库的 value 进行选择。

基本上,表单控件本身不会将数据保存到数据库中。表单控件附加到某个表单,表单将数据保存到数据库中。查看 documentation regarding custom form controls