我目前正在将Episerver与API进行整合。
非常简单,我从我的Episerver网站发布了一个表单,表单数据被发送到API并由其他系统处理。
我已经制作了一个硬编码的HTML表单,并将表单发布到我的API,没有任何问题。 - 所以我有点工作。
现在我需要做的是为自己的形式创建管理功能......
要求
用户可以创建表单。 表单中的一个字段需要有一个带有dyamic值列表的下拉列表(在episerver中配置)。 表单上显示的其余字段(只是字符串)取决于用户从下拉列表中选择的内容。
(表单上有一个固定的字段列表)我需要将此列表存储在episerver中。
我需要有人能够登录episerver,创建新的“API表单块”输入下拉列表中的项目列表,然后对于该列表中的每个项目,从固定数量的表单中选择要与该下拉列表项目相关联的字段。
我认为这个问题有很多部分,我知道我需要编写一些前端代码来显示/隐藏基于下拉选择的正确字段,我不会询问有关如何执行任何操作的建议这一点。
我想要建议的主要内容是,episerver的哪些功能可以帮助我存储数据结构必需,我已经开始查看PopertyList但不确定这是否是正确的方法,我怎么能连接一行在另一个PropertyList中的Sevral行的一个Propertylist中?
这是我的第一个EPI服务器项目,所以我希望在episerver中可能会有一些我不知道的事情,这将使这个任务变得容易。
想法请........?
更新
我已经开始尝试使用属性列表来实现它。我知道如何创建基本属性列表,但是可以在属性列表中选择一些复选框吗?像这样:
答案 0 :(得分:1)
你怎么样了?
我建议结合使用PropertyList
和SelectionFactory
属性,并使用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中处理的内容。