![](/img/trans.png)
[英]How to display ListPart items of Orchard Core CMS in razor view?
[英]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.