Orchard CMS - 从模型中显示视图中的项目列表

时间:2018-01-31 08:22:37

标签: orchardcms orchard-modules

我是Orchard CMS初学者,我不明白如何获取和显示视图中的项目列表。

我已阅读文章Writing a ContentPart,但示例显示了如何使用2个属性而不是列表:

驱动程序

    return ContentShape("Parts_Map", () => shapeHelper.Parts_Map(
        Longitude: part.Longitude,
        Latitude: part.Latitude));

查看

<img alt="Location" border="1" src="http://maps.google.com/maps/api/staticmap? 
     &zoom=14
     &size=256x256
     &maptype=roadmap
     &markers=color:blue|@Model.Latitude,@Model.Longitude
     &sensor=false" />

我想在视图中使用项目列表。

我还阅读了文章Orchard CMS Custom Widget View,但我不明白它是如何运作的,尤其是以下几行:

 var files = (IContentQuery<FilePart>)Model.Files;

我在哪里可以找到其他示例?

是否低于正确值?我使用IContentManager contentManager来传输数据进行查看。

驱动程序:

public class MyModuleWidgetPartDriver:ContentPartDriver   {

private readonly IContentManager contentManager;

public MyModuleWidgetPartDriver(IContentManager contentManager)
{
  this.contentManager = contentManager;
}

protected override DriverResult Display(MyModuleWidgetPart part, string displayType, dynamic shapeHelper)
{
  var MyModuleItems = this.contentManager.List<MyModulePart>(MyModulePart.ContentTypeName).ToArray();

  // List of items
  var MyModuleItemsViewModel = MyModuleItems.Select(MyModule => new MyModuleItemsViewModel
  {
    Title = MyModule.Title,
    Html = MyModule.Html
  });

  return ContentShape("Parts_MyModules", () => shapeHelper.Parts_MyModules(
           promo: Json.Encode(MyModuleItemsViewModel)));
}

MyModulePart:

   public class MyModulePart : ContentPart
{
    public const string ContentTypeName = "MyModule";

    public string Title
    {
        get { return this.As<ITitleAspect>().Title; }
    }

    public string Html
    {
        get { return this.As<BodyPart>().Text; }
    }
}

查看\零件\ MyModule.cshtml:

@{
    var MyModuleItems = Model.promo;
}

1 个答案:

答案 0 :(得分:0)

您可以在视图中将您需要的任何内容设置为您从驱动程序创建的形状。确保每当你执行一个&#34; heavy&#34;查询数据库的操作,您可以从形状工厂lambda(实际创建形状的lambda)中执行此操作。如果你在lambda之外执行此操作,即使你的形状不会被显示,你的查询也会执行,这显然是低效的。例如:

<强>驱动程序

return ContentShape("Parts_Map", () => {
   return shapeHelper.Parts_Map(
      MyList: _someService.GetMyListOfData(); // The MyList property will be added on the fly to the Parts_Map shape you're creating, and will be available in the view, whose model is in fact this Parts_Map shape.
      Longitude: part.Longitude,
      Latitude: part.Latitude);
});

查看

<ul>
@foreach(var item in Model.MyList){
   <li>@item.SomeProperty</li>
}
</ul>

请记住:形状是动态对象,您可以动态添加属性。当&#34;呈现形状时,真正发生的是Orchard根据与形状一起存储的元数据找到合适的Razor视图(每个形状都有Metadata属性),并将该视图的Model设置为形状对象