如何在 Orchard CMS 中获取动态表单提交记录数

Posted

技术标签:

【中文标题】如何在 Orchard CMS 中获取动态表单提交记录数【英文标题】:How to get dynamic form submission record count in Orchard CMS 【发布时间】:2017-02-21 09:55:49 【问题描述】:

我在Orchard CMS中做了一个动态表单的注册页面,收到了查看记录数的新要求。

我不知道该怎么做,我查看了Orchard.DynamicForms.Controllers 文件夹中的SubmissionAdminController.cs,但仍然找不到方法。

我正在考虑从我的cshtml 查看页面获取记录数并在不同部分进行检查,这可能吗?

【问题讨论】:

【参考方案1】:

要获取已存储提交的记录计数,请注入或解析IRepository<Submission>,并使用Count() 方法对所有项目进行计数。请注意,Count() 方法接受一个表达式,例如,它允许您按表单名称进行过滤。作为参考,这是Submission 类的样子:

namespace Orchard.DynamicForms.Models 
    public class Submission 
        public virtual int Id  get; set; 
        public virtual string FormName  get; set; 

        [StringLengthMax]
        public virtual string FormData  get; set; 
        public virtual DateTime CreatedUtc  get; set; 
    

当您拥有IRepository<Submission> 时,这就是您在名为“MyForm”的表单中计算所有提交的方式:

var count = submissionRepository.Count(x => x.FormName == "MyForm");

如果您没有控制器或自定义部件或任何东西可以将此 IRepository 注入其中,那么您可以直接从您的视图中解析存储库,如下所示:

@
    var submissionRepository = WorkContext.Resolve<IRepository<Submission>>();
    var submissionCount = submissionRepository.Count(x => x.FormName == "MyForm");

确保导入正确的命名空间:

Orchard.DynamicForms.ModelsSubmission Orchard.DataIRepository&lt;T&gt;

但是,如果您需要在多个位置显示此数字,最好创建一个形状以便您可以重复使用它。更好的是不直接从形状模板解析存储库,而是通过IShapeTableProvider。当您开始覆盖您的形状模板或开始提供形状替代品时,其主要原因就很清楚了,在这两种情况下,您的所有形状模板中都会有重复的逻辑,这当然不是很干。还有一个更哲学的关注点分离问题:您不希望数据访问代码出现在您的视图中。而是使用来自控制器、驱动程序或形状表提供程序的代码。

【讨论】:

那么你应该给出答案;) 很抱歉我点击了有用的向上按钮但没有足够的声誉。

以上是关于如何在 Orchard CMS 中获取动态表单提交记录数的主要内容,如果未能解决你的问题,请参考以下文章

Orchard CMS 默认寻呼机问题

Orchard是如何呈现内容的

初试Orchard Core CMS

如何在 Orchard 内容处理程序中动态添加内容部分?

ASP.Net CMS 推荐、Orchard、Sitefinity、Umbraco 还是 N2? [关闭]

Orchard Core 文档翻译 CMS ModulesTitle (OrchardCore.Title)