Episerver - 我应该如何存储这些数据 - 请

时间:2018-04-18 14:38:31

标签: episerver

我目前正在将Episerver与API进行整合。

非常简单,我从我的Episerver网站发布了一个表单,表单数据被发送到API并由其他系统处理。

我已经制作了一个硬编码的HTML表单,并将表单发布到我的API,没有任何问题。 - 所以我有点工作。

现在我需要做的是为自己的形式创建管理功能......

要求

用户可以创建表单。 表单中的一个字段需要有一个带有dyamic值列表的下拉列表(在episerver中配置)。 表单上显示的其余字段(只是字符串)取决于用户从下拉列表中选择的内容。

(表单上有一个固定的字段列表)我需要将此列表存储在episerver中。

我需要有人能够登录episerver,创建新的“API表单块”输入下拉列表中的项目列表,然后对于该列表中的每个项目,从固定数量的表单中选择要与该下拉列表项目相关联的字段。

我认为这个问题有很多部分,我知道我需要编写一些前端代码来显示/隐藏基于下拉选择的正确字段,我不会询问有关如何执行任何操作的建议这一点。

我想要建议的主要内容是,episerver的哪些功能可以帮助我存储数据结构必需,我已经开始查看PopertyList但不确定这是否是正确的方法,我怎么能连接一行在另一个PropertyList中的Sevral行的一个Propertylist中?

这是我的第一个EPI服务器项目,所以我希望在episerver中可能会有一些我不知道的事情,这将使这个任务变得容易。

想法请........?

更新

我已经开始尝试使用属性列表来实现它。我知道如何创建基本属性列表,但是可以在属性列表中选择一些复选框吗?像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

你怎么样了?

我建议结合使用PropertyListSelectionFactory属性,并使用SelectMany属性。

我们有一个要求,我们需要允许Episerver用户选择多个月,因此我们如下创建了SelectionFactory

using System.Collections.Generic;
using System.Globalization;
using EPiServer.Shell.ObjectEditing;

namespace Episerver.WebApp.Business
{
    public class MonthSelectionFactory : ISelectionFactory
    {
        public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
        {
            var result = new List<ISelectItem>();
                        
            foreach (var monthName in DateTimeFormatInfo.CurrentInfo.MonthNames)
            {
                if (string.IsNullOrWhiteSpace(monthName))
                    continue;

                result.Add(new SelectItem()
                {
                    Text = monthName,
                    Value = monthName.ToLower()
                });
            }

            return result;
        }
    }
}

您可以在SelectionFactory类中执行任意数量的操作,以获得动态的项目列表,而不是返回硬编码列表。例如。您可以使用Episerver API获取ContentLoader,以从页面或块获取项目,或从DDS(动态数据存储)获取数据。

然后,页面/块(在您的情况下,在PropertyList中)将SelectMany属性添加到媒体资源。

 [SelectMany(SelectionFactoryType = typeof(Business.MonthSelectionFactory))]
 public virtual string AvailableMonths { get; set; }

您的PropertyList属性将存储以逗号分隔的所选值列表。您应该能够在Controller或View中处理的内容。