【问题标题】:Episerver - How should I store this data - Ideas PleaseEpiserver - 我应该如何存储这些数据 - 请提供想法
【发布时间】:2018-09-28 20:43:02
【问题描述】:

我目前正在将 Episerver 与 API 集成。

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

我已经制作了一个硬编码的 HTML 表单,并且可以毫无问题地将表单发布到我的 API。 - 所以我已经开始工作了。

现在我需要做的是为它自己的表单创建管理功能.....

要求

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

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

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

我知道这个问题有很多部分,而且我知道我需要编写一些前端代码来根据下拉选择显示/隐藏正确的字段,我没有就如何做任何事情征求意见那个。

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

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

请给点意见......?

更新:

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

【问题讨论】:

  • 查看了SelectMany 属性与SelectionFactory 的组合?
  • 当涉及到像 DDS(动态数据存储)这样的存储结构时,DDS(动态数据存储)不是一个糟糕的选择,但需要编写自己的 gui 来管理它,我建议为此创建一个小部件.将其与@TedNyberg 建议的 selectionFactory 结合起来并不是一个糟糕的选择world.episerver.com/documentation/developer-guides/CMS/…
  • 感谢大家的建议,因为我需要的字段实际上是一组固定的字段,我只是对它们进行了硬编码,但是一旦我完成了这一切,我会回来尝试你的建议使这个动态

标签: episerver


【解决方案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 属性将存储一个逗号分隔的选定值列表。您应该能够在控制器或视图中处理。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多