如何在果园中获取自定义表单的下一个ContentItem Id?

时间:2014-08-19 12:35:03

标签: forms razor orchardcms

我正在将现有网站移植到Orchard。该网站非常复杂:想象一下有两个区域的布局:正文和旁边

当内容为ContentType“Service”时,呈现此形状的Content-Service.cshtml备用视图也会在旁边区域中使用

注入另一个形状

WorkContext.Layout.Aside.Add(New.Parts_PdfDocument(Model.ContentItem.Service.PdfDocument), “1.1”);

效果很好,在旁边区域显示备用Parts.PdfDocument.cshtml

我可以从中访问我感兴趣的所有内容(有关PDF的信息)

无论如何,要下载PDF,用户填写表格ContactRequest(FirstName,LastName ...)然后表格将启动一个工作流程,提醒某个特定用户赢得一封电子邮件(已经完成并且已经有效) )

我的第一个想法是通过模拟Orchard.CustomForms模块的CustomFormPartDriver中发生的事情,以编程方式为ContactRequest创建ContentItem。 在Parts.CaseStudies.cshtml中我写了

@{
        var services = WorkContext.Resolve<IOrchardServices>();

        var contentManager = services.ContentManager;
        var contact = contentManager.New("ContactRequest");
        var editor = contentManager.BuildEditor(contact);

}

所以要获得有效的ID,然后按照以下方式使用

@using(Html.BeginFormAntiForgeryPost(Url.Action("Create", "Item", new { area = "Orchard.CustomForms", id = editor.ContentItem.Id}))){ /*[...] form fields here */ }

不幸的是,这似乎不起作用,并且Id始终为零。 我也尝试添加

contentManager.Create(contact);

这次我获得了一个不同于零的Id,但每次访问页面时它都会增加,这与我发送或不发送表单的事实无关,这与正常的果园表单模块行为有所不同。相同的ID,直到表格被发送和保存。

问题: 哪个是实例化表单编辑器的正确方法,以便将正确的Id传递给Html.BeginFormAntiForgeryPost方法?

我试图实现的其他方式有更好的方法吗?我想避免编写模块,如果可能的话

0 个答案:

没有答案