我创建了一个内容类型“俱乐部”,我添加了部分名称“课程”。我想在我的控制器代码中获取Club(内容类型)列表。
public ActionResult Index(PagerParameters pagerParameters, CourseSearchVM search)
{
//this is displaying only published content
var courseQuery = _contentManager.Query<CoursePart>().List().ToList();
// Project the query into a list of customer shapes
var coursesProjection = from course in courseQuery
select Shape.course
(
Id: course.Id,
Name: course.Name,
Description: course.Description
);
// The pager is used to apply paging on the query and to create a PagerShape
var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters.Page, pagerParameters.PageSize);
// Apply paging
var coures = coursesProjection.Skip(pager.GetStartIndex()).Take(pager.PageSize);
// Construct a Pager shape
var pagerShape = Shape.Pager(pager).TotalItemCount(courseQuery.Count());
// Create the viewmodel
var model = new CourseIndexVM(coures, search, pagerShape);
return View(model);
}
答案 0 :(得分:0)
您必须访问控制器中的IContentManager,您只需将其添加到构造函数中即可(请参阅依赖注入,autofac将执行此操作)。除此之外,你可以使用IOrchardServices,它可以让你访问一些常见的服务(如果你想使用两个更多的依赖项,那就这样做)
public MyController(IOrchardServices services){
this.services = services;
}
在你的行动中你可以这样做:
services.ContentManager.HqlQuery()
.ForType("Club").List()
.Select(ci => services.ContentManager.BuildDisplay(ci, "Summary"));
第一部分将创建ContentType及其内容部分的列表,然后它将结果投影到形状列表,之后,您可以将这些形状附加到另一个以显示列表。
完成行动:
var clubs = services.ContentManager.HqlQuery()
.ForType("Club").List()
.Select(ci => services.ContentManager.BuildDisplay(ci, "Summary"));
var shape = services.New.ClubList();
shape.Clubs = clubs;
return new ShapeResult(this, shape);
这将返回一个包含属性Clubs的形状,这是您在Drivers上定义的形状列表。请注意,您必须为ClubList创建一个视图。在您的形状ClubList中,您可以通过以下方式显示您的球杆形状:
@foreach (var club in Model.Clubs) {
@Display(club)
}