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

时间:2017-02-21 09:55:49

标签: c# orchardcms submission dynamicform

我在 Orchard CMS 中创建了一个包含动态表单的注册页面,并收到了检查记录计数的新要求。

我不知道如何执行此操作,我查看了SubmissionAdminController.cs文件夹中的Orchard.DynamicForms.Controllers,但仍无法找到方法。

我正在考虑从我的cshtml视图页面获取记录计数并在不同部分进行检查,是否可能?

1 个答案:

答案 0 :(得分:0)

要获取存储提交的记录数,请注入或解析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>,则可以使用名为&#34; MyForm&#34;的表格计算所有提交内容:

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

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

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

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

    {li> Orchard.DynamicForms.Models Submission {li> Orchard.Data IRepository<T>

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