我正在将现有网站移植到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方法?
我试图实现的其他方式有更好的方法吗?我想避免编写模块,如果可能的话