簡體   English   中英

Orchard CMS-在模型中顯示視圖中的項目列表

[英]Orchard CMS - Display a list of items in view from model

我是Orchard CMS的初學者,不了解如何獲取和顯示視圖中的項目列表。

我已經閱讀了《 編寫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自定義窗口小部件視圖文章,但我不明白它是如何工作的,尤其是以下幾行:

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

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

下面是否正確? 我使用IContentManager contentManager傳輸數據以查看。

司機:

公共類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;
}

您可以將視圖中所需的任何內容設置為從驅動程序創建的形狀。 確保確保每當執行諸如查詢數據庫之類的“繁重”操作時,都從shape factory 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>

請記住:形狀是動態對象,您可以在其中動態添加屬性。 當“渲染形狀”時,真正發生的事情是Orchard基於隨形狀一起存儲的元數據(每個形狀都有Metadata屬性)找到合適的Razor視圖,並將該視圖的Model設置為形狀對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM