我在Orchard CMS中制作了一个动态表单的注册页面,并收到了检查记录数的新要求。
我不知道如何做到这一点,我查看了SubmissionAdminController.cs
inOrchard.DynamicForms.Controllers
文件夹,但仍然找不到方法。
我正在考虑从我的cshtml
查看页面获取记录数并在不同部分进行检查,这可能吗?
我在Orchard CMS中制作了一个动态表单的注册页面,并收到了检查记录数的新要求。
我不知道如何做到这一点,我查看了SubmissionAdminController.cs
inOrchard.DynamicForms.Controllers
文件夹,但仍然找不到方法。
我正在考虑从我的cshtml
查看页面获取记录数并在不同部分进行检查,这可能吗?
要获取已存储提交的记录数,请注入或解析一个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.Models
为了Submission
Orchard.Data
为了IRepository<T>
但是,如果您需要在多个位置显示此数字,最好创建一个形状以便您可以重复使用它。更好的是不直接从形状模板解析存储库,而是通过IShapeTableProvider
. 当您开始覆盖您的形状模板或开始提供形状替代品时,其主要原因就很清楚了,在这两种情况下,您的所有形状模板中都会有重复的逻辑,这当然不是很干。还有一个更哲学的关注点分离问题:您不希望数据访问代码出现在您的视图中。而是使用来自控制器、驱动程序或形状表提供程序的代码。