在Orchard CMS中使用ShapeHelper生成形状 - 未找到类型

时间:2013-08-05 13:51:52

标签: asp.net-mvc orchardcms orchardcms-1.6

我正在使用Orchard CMS构建一个站点并创建自己的自定义模块。我一直在学习几本教程,而且非常好。

我不明白.ShapeHelper()方法是如何工作的,这给我带来了一些麻烦。

以下代码来自我的驱动程序文件,完全正常,并在前端生成我的视图。

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.DisplayTemplate(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }

但是,我在其他教程中已经看到,而不是使用DisplayTemplate部件/视图的名称而不是......我更愿意这样做,特别是在使用Shape Tracing模块时,它会让人感到有些困惑看到“DisplayTemplate”(如下图所示......)而不是更易识别的名称

enter image description here

我尝试过将我的方法改为:

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.Parts_SubscribersForm(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }
  • 注意“Parts_SubscribersForm()” - 但是当我这样做时,我收到以下错误......

enter image description here

我认为这与我的观点所处的位置有关,但我也相信我在Orchard所需的正确文件夹中有这些。这是我的观点所涉及的文件夹结构......

enter image description here

任何人都能指出我正确的方向 - 我可以在shapeHelper方法中使用我的零件名称,而不是“DisplayContent”吗?

1 个答案:

答案 0 :(得分:7)

将显示模板直接放在Views文件夹(/Views/Parts.SubscribersForm.cshtml)内,而不是DisplayTemplates内。按照惯例,Orchard仅在查找形状模板时扫描Views个文件夹。另一方面,EditorTemplates子文件夹包含部分编辑器的模板,即。从驱动程序Editor方法返回的那些形状。

那个动态的shapeHelper是什么东西?简而言之 - 它是形状工厂。当你打电话的时候。 shapeHelper.SomeShape(Foo: 1, Bar: "baz"),它返回一个与SomeShape.cshtml模板对应的形状对象,其动态模型包含属性FooBar。该模板必须位于模块或主题的Views文件夹中的某个位置。这或多或少都是魔术。

如果你想更多地了解形状 - 这是一个很好的起点:http://docs.orchardproject.net/Documentation/Accessing-and-rendering-shapes